通过DFS和BFS判断无向图是否连通
来源:互联网 发布:国外大数据最牛公司 编辑:程序博客网 时间:2024/05/16 12:03
基础定义
无向图:没有方向的图
连通图:任意两个顶点可以直接或者通过其他顶点走通,那么就是连通图,和完全图需要区别(完全图是需要任意两个顶点直接有路)
遍历图的基本方法来判断是否连通
DFS和BFS有的步骤都是从一个顶点开始,然后判断该顶点是否被访问,而且该顶点和其他顶点是否有关系,若有关系并且没有访问过,就往下访问,要是无向图是连通的,那么这个过程会依次下去遍历所有节点。所以通过这个特性,就可以设置一个全局变量count去记录,看最后count的值和顶点数是否相同,若相同则说明是无向连通图,反之则不是。
int count = 0;void DFS(MGrap G. int i){ int j = 0; visited[i] = 1; count++; for(j=0; j<G.numVertexes; j++) { if(G.arc[i][j]==1 && !visited[j])//i和j有关系相邻,并且j顶点没有被访问过 { DFS(G, j); } }}
int count = 0;void BFS(MGrap G){ int i,j; Queue Q; for(i=0; i<G.numVertexes; i++)/*初始化访问数组*/ { visited[i] = -1; } InitQueue(&Q); for(i=0; i<G.numVertexes; i++) { if(!visited[i]) { visited[i] = 1; printf("%c",G.vexs[i]); EnQueue(&Q,i);/*入队操作*/ while(!QueueEmpty(Q)) { DeQueue(&Q, &i); for(j=0; j<G.numVertexes; j++) { /* 判断当前的节点与其他节点的关系 */ if(G.arc[i][j]==1 && !visited[j]) { if(i==0)/*首先遍历的节如果和其他边有关系的话要加上*/ { count++; } visited[j] = 1; count++; EnQueue(&Q,j); } } } } }}
PS:这个代码是自己想着加的,也不知道对不对。若果不对,希望小伙伴们帮我指出来。
阅读全文
0 0
- 通过DFS和BFS判断无向图是否连通
- 通过BFS 和 DFS两种方法找无向图的连通分量
- 判断无向图G是否连通
- poj 3713(判断无向图是否三连通)
- 数据结构判断无向图是否为连通
- 使用并查集判断无向图是否连通
- 无向图dfs判断是否有环和是否二分图
- 无向图dfs求连通分量
- 无向图的DFS和BFS算法实现
- 邻接矩阵 有向图 判断是否有环 是否连通 DFS C实现~
- 有向图是否有环 BFS 和 DFS
- 无向图创建+BFS+DFS(整合)
- dfs, bfs之邻接矩阵无向图
- eoj 1816. 连通(无向图是否连通判定)
- 有向图和无向图和树判断是否有环和无环
- 无向图的连通分量 通用BFS算法
- 求连通分量(无向图,邻接矩阵,BFS)
- BFS/DFS 判断是否是二分图
- 面向对象的程序设计(1)
- leetCode-Non-decreasing Array
- Octave 入门
- 蓝桥选拔第一场(D)
- 标准模板库 STL-2 编程题#5: 热血格斗场(Coursera 程序设计与算法 专项课程3;函数用法:lower_bound, equal_range)
- 通过DFS和BFS判断无向图是否连通
- Linux 命令每日一练:cp命令
- IEnumerator协同程序
- 常见C语言题目:选择排序,冒泡排序,函数调用,递归等重要题列
- Hadoop 的Combiner调用时间点
- Linux下利用SWIG完成Python对使用OpenCV的C++文件的调用
- hdu oj 1961 Pseudo-Random Numbers
- [Java数据结构]简单排序之选择排序
- C/C++初学攻略