解题思路:
例子解释:第一次搜索 V为0 ,有两个相通的顶点 为1 3 此时1为被访问递归调用自身
第二次 v=1 无相通点 回到第一次的搜索状态
v=0 此时 i=1 时 顶点1 已访问过,循环到3时,3未访问 递归调用
第三次 v=3 两个相通点 0 2 因为0已经访问过。以此类推。
访问顺序如图:
注意事项:
参考代码:
#include <bits/stdc++.h> using namespace std; const int Max=1000; int G[Max][Max];//邻接矩阵图 int vis[Max]; int n; void dfsG(int v){ printf("%d ",v);//访问数组 vis[v]=1;//标记访问 for(int i=0;i<n;i++){ if(G[v][i]==1 && vis[i]==0) //遍历当前位置是否有可访问的顶点 dfsG(i); } } int main () { cin>>n; memset(vis,0,sizeof vis);//初始化vis for(int i=0;i<n;i++){//输入 for(int j=0;j<n;j++){ scanf("%d",&G[i][j]); } } dfsG(0);//从顶点0开始搜索 return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复