深度优先搜索(DFS)

180 阅读1分钟

原理

选择一条路一直走,直到遇到符合的条件 或者 到头了,再原路返回原来的节点 再选择其他方向,依次进行遍历,最终把所有节点都遍历完

模板如下

boolean[] visit = new boolean[];	/*访问标志数组*/
	/* 邻接矩阵的深度优先递归算法 */
	void DFS(MGraph G, int i)
	{
		visit[i] = true;
		System.out.print(G.vexs[i]);	/*打印顶点,也可以是其他操作*/
		for(int j = 0; j < G.numVertexes; j++ ) {
			if(G.arc[i][j] == 1 && !visit[j] ) {
				DFS(G, j);				/*对未访问的邻接顶点递归调用*/
			}
		}
	}
	/* 邻接矩阵的深度遍历操作 */
	void DFSTarverse(MGraph G)
	{
		for(int i = 0; i < G.numVertexes; i++) {
			visit[i] = false;			/*初始化所有顶点为未访问过状态*/
		}
		for(int i = 0; i < G.numVertexes; i++) {
			if(!visit[i]) {				/*对未访问过的顶点DFS遍历,若是连通图,只会执行一次*/
				DFS(G, i);
			}
		}
	}  
/*DFS函数内部内容

	void DFS(...) {
		visit[i] = true;	表示遍历过了
		
		if(...) return;		作为跳出递归的结束条件
		
		.......
		.......				DFS需要的操作
		.......				
		
		DFS(...)			继续递归调用
	}*/