无向图的判环
来源:互联网 发布:鲁班预算软件 编辑:程序博客网 时间:2024/04/29 19:26
(1)先介绍一下无向图的判断算法,这个比较简单:
判断无向图中是否存在回路(环)的算法描述
如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。
算法:
第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一。
第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。
如果最后还有未删除顶点,则存在环,否则没有环。
算法分析:
由于有m条边,n个顶点。如果m>=n,则根据图论知识可直接判断存在环路。
(证明:如果没有环路,则该图必然是k棵树 k>=1。根据树的性质,边的数目m = n-k。k>=1,所以:m<n)
如果m<n 则按照上面的算法每删除一个度为0的顶点操作一次(最多n次),或每删除一个度为1的顶点(同时删一条边)操作一次(最多m次)。这两种操作的总数不会超过m+n。由于m<n,所以算法复杂度为O(n)
(2)用dfs来判环。
用dfs来判的时候需要判断一下
比如4-5的时候如果由4访问5,然后由5开始访问它周围节点的时候,4节点无须再访问。
int dfs(int u,int p)//u表示当前访问的节点,p表示的是它的前继节点。{if(vis[u])//出现访问过的节点,说明有环。返回上一层节点继续搜索 { return 1; }vis[u]=1;int m=V[u].size();for(int i=0;i<m;i++){int v=V[u][i];if(v!=p)//如果当前节点不等于它的前继的话,才访问。 dfs(v,u);}return 0;}
0 0
- 无向图的判环
- LightOJ 1003 Drunk【有向图的拓扑排序判环】
- 无向图的连通性
- 无向图的实现
- 无向图的实现
- 无向图的生成
- 无向图的桥
- 无向图的邻接矩阵
- 无向图的领接表
- 无向图的连通性
- 无向图的实现
- 无向图判断环
- hunnu11472(判有向图是否有有向环)
- 找出无向图中所有的环的算法
- 求无向图的所有最小闭合环
- 快速计算一个无向图中的环的个数
- 思考 如何判断图存在环,存在环的数目,无向图,有向图
- 有向图、无向图是否有环的判断
- 架构高性能网站秘笈(五)——Web组件分离
- Missing artifact info.monitorenter.cpdetector:cpdetector:jar:1.0.7
- Java并发编程:volatile关键字解析
- python比较文本相似度(not semantical)
- ES6-新数据结构Map
- 无向图的判环
- java基础(三),字符串
- 转:关于链式表达式
- 进程线程区别联系
- 以太网与车载系统:金风玉露一相逢,便胜却人间无数
- 情感化设计
- c#多线程刷新界面
- 容斥原理训练 (16.04.10)
- php