图的深度优先搜索
2015-07-06 21:46
211 查看
图的深度优先遍历是优先沿着某一条分支遍历,按照某种顺序(比如文中是按照从编号小节点到编号大节点),访问该分支的所有子节点然后回溯,沿着另一条分支做同样的操作.
如图按照深度优先搜索的顺序为1-2-4-3-5
现在在第一行输入n(1~n节点),m个关系式
接下来输入m行关系式,每行关系式表示c,d相连,要求输出深度优先搜索的顺序~~
参考:啊哈磊的《啊哈!算法》
如图按照深度优先搜索的顺序为1-2-4-3-5
现在在第一行输入n(1~n节点),m个关系式
接下来输入m行关系式,每行关系式表示c,d相连,要求输出深度优先搜索的顺序~~
#include <stdio.h> void dfs(int cur); int book[101];//用来标记该节点是否被访问过,初始化为未访问过 int a[101][101]; int n;//n为总结点的个数 int main() { int i,j,c,d,m;//m为需要读入关系式的个数 scanf("%d%d",&n,&m); for (i=1;i<=n;i++) for (j=1;j<=n;j++)//从一开始是因为节点关系从1~n if (i==j) a[i][j]=0;//如果为同一点,则距离为0(事实上这一题0和无穷大可以归为一类,这样写只是为了方便理解,因为只考虑这两点是否相连,即是否等于1) else a[i][j]=10000;//设置两点不相连(即距离无穷大) for (i=1;i<=m;i++) { scanf("%d%d",&c,&d); a[c][d]=1; a[d][c]=1;//无向图 } book[1]=1;//从1开始遍历(你也可以规定从哪里开始遍历) dfs(1); return 0; } void dfs(int cur) { int i; printf("%d ",cur); for (i=1;i<=n;i++) if ((a[i][cur]==1)&&book[i]==0)//如果第i个节点与cur相连,同时第i个没有被访问过 { book[i]=1; dfs(i); } return; }
参考:啊哈磊的《啊哈!算法》
相关文章推荐
- Android 增强版百分比布局库 为了适配而扩展
- Xcode安装Cocos2d-iphone
- 【Leetcode Algorithm】Power of Two
- 黑马程序员——Java基础---集合(第18天 )
- S3C2410按键poll
- Qt部件----按钮,标签,表的使用
- android 百分比控件的使用
- Android性能优化--Listview优化
- [工具-006] C#如何模拟发包登录
- Android 进阶学习:Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- ubuntu 15.04 安装配置 JDK1.8
- 连接池
- Android第一次项目-拨打电话
- [Leetcode]Power of Two
- ----------学生信息管理系统-------
- 安装332bit JAVA 后eclipse无法启动 错误代码exit code=13
- 关于重载二义性
- 【从零单排之微软面试100题系列】06之根据上排数写出下排数
- CF 552-C. Vanya and Scales
- Codeforces Round #290 (Div. 2) C. Fox And Names 拓扑排序