图的遍历 之 深搜dfs
DFS 遍历
深度优先搜索是一个递归过程,有回退过程。
对一个无向连通图,在访问图中某一起始顶点u 后,由u 出发,访问它的某一邻接顶点v1;再从v1 出发,访问与v1 邻接但还没有访问过的顶点v2;然后再从v2 出发,进行类似的访问;…;如此进行下去,直至到达所有邻接顶点都被访问过的某个顶点x 为止;接着,回退一步,回退到前一次刚访问过的顶点,看是否还有其它没有被访问过的邻接顶点,如果有,则访问此顶点,之后再从此顶点出发,进行与前述类似的访问;如果没有,就再回退一步进行类似的访问。
重复上述过程,直到该连通图中所有顶点都被访问过为止。
深搜过程:
深搜算法实现:
代码如下:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 char maps[10][11]; 5 bool vis[1000]; 6 int q,m; 7 void dfs(int a){ 8 vis[a]=1; 9 if(a<q) 10 printf("%c --> ",a+64); 11 else printf("%c",a+64); 12 for(int i=1;i<=q;i++) 13 { 14 if(maps[a][i]==1&&vis[i]==0) 15 dfs(i); 16 } 17 } 18 int main() 19 { 20 21 char a,b; 22 cin>>q>>m; 23 for(int i=1;i<=m;i++) 24 { 25 cin>>a>>b; 26 maps[a-64][b-64]=1; 27 maps[b-64][a-64]=1; 28 } 29 dfs(1); 30 }