原理
选择一条路一直走,直到遇到符合的条件 或者 到头了,再原路返回原来的节点 再选择其他方向,依次进行遍历,最终把所有节点都遍历完
模板如下
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(...) 继续递归调用
}*/