无向图的邻接矩阵 -- DFS - 深度优先遍历
来源:互联网 发布:取消windows正版验证 编辑:程序博客网 时间:2024/04/28 17:37
无向图的邻接矩阵 -- DFS - 深度优先遍历
逝去的日子: 2012/11/01
回想当年在学校学数据结构时,很多算法都没有搞得太明白,可能那时太不用心了,也可能是自己理解的太慢了.现在重新拿起数据结构的一本书决心好好温习一遍.
发现这里对其有动画的演示:
http://www.tyut.edu.cn/kecheng1/site01/suanfayanshi/default.asp
记得学校时,好像学校机房里也有一个DOS下的动画演示.
这个理解含义就比较简单了,回想当年在学校学树\图这些算法时,怎么就想不明白呢?
DFS可以用在迷宫这类的题,因是贪心算法之类的.
如下的图1,如果我们把它看成是有层次的(相对于广度优先算法),
从0开始,找下一层就是 1,2,3的节点,深度就是深入进去啦,如下一点1,
1下面有节点4,4下面有2,5,再从其中一个,如2,
2下面有0,5,0已经遍历过了,所以再从5开始,
5下面有3,4,4已经遍历过了,所以下一节点3,
3下面节点有0,0也遍历过了,回到了起点
遍历完了.
当然图1没有一个是像树那样的叶子节点,没有说到回逆,
假如4和2,5节点的连接是没有的,那么遍历到1时,
1下面有4,4没有其它连接节点了,回到1,
1没有其它的还没有遍历的节点了,再回到0
0下还有2,3没有遍历,从2 开始.....
后面的就一致了.
图1(一个连通分量)
图2 (二个连通分量)
#include<stdio.h>#include<stdlib.h> //一个6个点的邻接矩阵#define COUNT_POINTS 6/* //图1的矩阵int arr_point[COUNT_POINTS][COUNT_POINTS]={ {0,1,1,1,0,0}, {1,0,0,0,1,0}, {1,0,0,0,1,1}, {1,0,0,0,0,1}, {0,1,1,0,0,1}, {0,0,1,1,1,0}};*/ //图2的矩阵int arr_point[COUNT_POINTS][COUNT_POINTS]={ {0,1,1,0,0,0}, {1,0,0,0,1,0}, {1,0,0,0,1,0}, {0,0,0,0,0,1}, {0,1,1,0,0,0}, {0,0,0,1,0,0}}; //记录COUNT_POINTS个点是否遍历过,如果为0表示没有,1表示遍历过. 如 points_visited[1] 表示第2个点是否被遍历过了int points_visited[COUNT_POINTS] = {0}; /**深度优先遍历*给定一个点开始遍历,*i表示第几个点*/static void DFS(int i){ int k; //打印遍历到的点 printf("point:%d\n",i); if(i>=0 && i<COUNT_POINTS){ points_visited[i] = 1; for(k = 0; k < COUNT_POINTS; k++){ //如果一个点没有被遍历过:points_visited[k] !=1,并且与当前点是相连的arr_point[i][k] == 1,就进入下一层 if((k != i) && (points_visited[k] !=1) && (arr_point[i][k] == 1)){ DFS(k); } } }} int main(int argv,char *argc[]){ int k; //如果一个点就遍历完了,就是一个连通图 for(k=0;k<COUNT_POINTS;k++) if(points_visited[k] == 0){ printf("connected component\n"); DFS(k); } return 0;}
图1的结果:
hello2012@ubuntu:~/CookBookC$ sudo gcc -g BFS.c -o BFS.out
hello2012@ubuntu:~/CookBookC$ ./BFS.out
connected component:
point:0
point:1
point:4
point:2
point:5
point:3
图2的结果:
hello2012@ubuntu:~/CookBookC$ sudo gcc -g BFS.c -o BFS.out
hello2012@ubuntu:~/CookBookC$ ./BFS.out
connected component
point:0
point:1
point:4
point:2
connected component
point:3
point:5
- 无向图的邻接矩阵 -- DFS - 深度优先遍历
- 邻接矩阵存储的无向图深度优先(DFS)广度优先(BFS)遍历
- 无向图邻接矩阵的储存和深度优先遍历
- 深度优先生成树(无向图,邻接矩阵,DFS)
- 无向图邻接表的深度优先遍历(DFS)
- 无向图的构建及深度优先遍历---邻接矩阵实现
- 无向图的邻接矩阵,深度优先遍历和广度优先遍历的递归与非递归算法
- 无向图的邻接矩阵,深度优先遍历广度优先遍历的递归与非递归算法
- 无向图的深度优先遍历
- 基于邻接矩阵的无向图的广度优先遍历
- 图的深度优先遍历DFS(邻接矩阵表示法)
- 图的邻接表 邻接矩阵 深度优先遍历DFS
- 无向图的广度优先遍历---邻接矩阵实现
- 邻接矩阵无向图的创建和遍历(dfs)
- 邻接矩阵遍历(无向图,邻接矩阵,DFS,BFS)
- c语言编程 输出一个无向图的邻接表,邻接矩阵,进行深度和广度优先遍历
- 邻接矩阵实现--图的深度优先遍历DFS和广度优先遍历BFS
- DFS--深度优先搜索--图的邻接矩阵
- Ajax 注册异步验证小例子
- gvim配置及相关插件安装(过程详细,附图)
- Android模拟按键
- 分数的累加
- Alsa在2416硬件平台上的移植
- 无向图的邻接矩阵 -- DFS - 深度优先遍历
- 亲爱的界面:让用户乐于使用、爱不释手(用户界面设计百科全书)
- 伤感女的最新心情日志:离开你,我以为我会哭
- 对某个T-CODE 没有权限的时候怎么办?
- BT源代码分析
- uac_auth.xml
- Android开发中隐藏类的使用
- mint 下wine1.4的使用体验
- > puts "is true" if 0 is true