数据结构之深度优先遍历
来源:互联网 发布:重装ubuntu系统 编辑:程序博客网 时间:2024/05/16 23:55
深度优先遍历:
从根节点开始遍历,从左到右依次遍历,遍历时应先将一条分支上遍历完才进行下一轮遍历。
如图:
遍历顺序为:1 2 4 3 5
程序如下:
#include <stdio.h>int book[101]; //用于标记是否已遍历过,未遍历则为值为0int sum; //每标记一次加 1 ,直到sum等于需要遍历的顶点个数n为止int n,e[101][101]; //数组e作为两顶点之间的标记,为1则两者之间有连线,0则代表两者之间无连线。void dfs(int cur){ int i; printf("%d",cur); sum++; //记录标记次数 if(sum==n) { return; //sum=n,所有顶点标记完成,退出 } for(i=1;i<=n;i++) //从根节点开始,依次遍历 { if(e[cur][i]==1&&book[i]==0) { book[i]=1; //表示该点已遍历,标记为1 dfs(i); //递归调用,继续遍历下一个点 } }}int main(){ int i,j,m,a,b; printf("请输入元素个数,以及输入连线次数m: "); scanf("%d %d",&n,&m);//初始化二维数组 for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==j) e[i][j]=0; else e[i][j]=9999999; //用9999999表示无穷大 } }//值为1表示两者之间有连线,属于同一个分支,可继续遍历 for(i=1;i<=m;i++) { scanf("%d %d",&a,&b); //输入a b e[a][b]=1; e[b][a]=1; //无向图,两个方向都需设置为1 } book[1]=1; dfs(1); //调用遍历函数 getchar(); getchar(); return 0;}
程序运行结果:
请输入元素个数n,以及连线次数m:
5 4
1 2
1 3
1 5
2 4
遍历输出结果:1 2 4 3 5
a,b输入顺序可忽略。
注:学习笔记引用于纪磊 《啊哈!算法》
0 0
- 数据结构之深度优先遍历
- 数据结构之深度优先遍历
- 数据结构之二叉树的深度优先遍历
- 《大话数据结构》之图的深度优先遍历
- 第十二周--数据结构-迷宫之图的深度优先遍历
- 数据结构之图的的深度与广度优先遍历
- 数据结构之图---深度优先遍历---C++实现
- [数据结构]Graph之深度优先遍历(DFT)及广度优先遍历(BFT)
- 数据结构之图的深度优先遍历和广度优先遍历
- 数据结构学习之图的深度优先遍历和广度优先遍历
- 数据结构——深度优先遍历和广度优先遍历
- 数据结构---图的广度优先遍历和深度优先遍历
- 数据结构和算法之:图的深度优先和广度优先遍历及其Java实现
- 数据结构与算法专题之图——图的遍历(深度优先遍历和广度优先遍历)
- 数据结构:图深度优先遍历算法
- 数据结构(二) 深度优先遍历 DFS
- 数据结构(15):图 深度优先遍历(DFS)
- 数据结构-图的深度优先遍历(DFS)
- File-用递归列出一个目录下的目录树
- Office软件MS10-087漏洞实战
- C++ 日期类函数 完善
- 怎样写一个lemon的spj
- struct request_queue
- 数据结构之深度优先遍历
- 大小端 位域 字节对齐
- Sublime 插件
- jvm基础
- 从0移植uboot(三) _编译最小可用uboo
- JavaScript类和模块
- 抽象类与接口
- 动态规划之大数乘积
- 实践指南!16位资深行业者教你如何学习使用TensorFlow