思维导图:
深度优先遍历的原理:
ps:
实现方法是递归+数组或者栈+数组
邻接矩阵法的DFS,BFS唯一,邻接表法不唯一
深度优先遍历的代码实现:
bool visited[MAX_TRUE_SIZE];
void DFSTraverse(Graph G){
for(int i=0;i<G.vexnum;++i)
visited[i] = false;
for(int i=0;i<G.vexnum;++i)
if(!visited[i])
DFS(G,i);
}
void DFS(Graph G,int v){
visit(v);
visited[v] = true;
for(w = FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w))
if(!visited[w])
DFS(G,w);
}
深度优先遍历的性能:
深度优先生成树:
遍历与连通性的关系:
1、遍历函数的次数与连通分量的关系(只在无向图成立,有向图不成立,见2)
ps: 在无向图中,广度优先和深度优先算法中,都有一个每个节点都调用一次深度或广度优先遍历算法的循环,若从1开始,调用一次可遍历到1234567节点,然后234567不调用遍历算法;到节点9时,再次调用算法可遍历到89,然后9不调用遍历算法。所以,有几个连通分量,就会调用几次遍历算法
2、在有向图中,一次遍历算法可以遍历到所有节点,不能说明此有向图强连通
3、