博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
判断一个图是否有环
阅读量:7207 次
发布时间:2019-06-29

本文共 689 字,大约阅读时间需要 2 分钟。

无向图

方法一:

如果存在回路,则必存在一个子图,是一个环路。环路中所有顶点的度>=2。    

第一步:删除所有度<=1的顶点及相关的边,并将另外与这些边相关的其它顶点的度减一。  

第二步:将度数变为1的顶点排入队列,并从该队列中取出一个顶点重复步骤一。  

如果最后还有未删除顶点,则存在环,否则没有环。  

(实现代码以后补充)

方法二:

深度优先遍历该图,如果在遍历的过程中,发现某个节点有一条边指向已经访问过的节点,并且这个已访问过的节点不是当前节点的父节点(这里的父节点表示dfs遍历顺序中的父节点),则表示存在环。

(实现代码以后补充)

有向图

方法一:

拓扑排序,如果能够用拓扑排序完成对图中所有节点的排序的话,就说明这个图中没有环,而如果不能完成,则说明有环。

(实现代码以后补充)

方法二:

强连通子图:对于一个图的某个子图,该子图中的任意u->v,必有v->u,则这是一个强连通子图。

通过寻找图的强连通子图的方法可以找出一个图中到底有没有环、有几个环。

(实现代码以后补充)

方法三:

改进DFS

    图中的一个节点,根据其C[N]的值,有三种状态:

    0,此节点没有被访问过

    -1,被访问过至少1次,其后代节点正在被访问中

    1,其后代节点都被访问过。

    按照这样的假设,当按照DFS进行搜索时,碰到一个节点时有三种可能:

    1、如果C[V]=0,这是一个新的节点,不做处理

    2、如果C[V]=-1,说明是在访问该节点的后代的过程中访问到该节点本身,则图中有环。

    3、如果C[V]=1,类似于2的推导,没有环。    在程序中加上一些特殊的处理,即可以找出图中有几个环,并记录每个环的路径

转载地址:http://oilum.baihongyu.com/

你可能感兴趣的文章
FTP传输文件被破坏的问题(Linux、Busybox)
查看>>
242. Valid Anagram
查看>>
P1024 一元三次方程求解(二分答案)
查看>>
Collections库使用
查看>>
SQL Server开启READ_COMMITTED_SNAPSHOT
查看>>
Linux学习7之Shell基础--Bash的变量
查看>>
VirtualBox虚拟机增加CentOS根目录容量 LVM扩容
查看>>
Nginx 和 PHP 的两种部署方式比较
查看>>
纪录2b,和诡异,
查看>>
appendFormat
查看>>
centos下安装升级python到python3.5
查看>>
数据结构实验之排序二:交换排序
查看>>
【视频教程】Mini6410/Tiny6410的国嵌视频教程光盘,总共五张
查看>>
桶排序
查看>>
追MM与Java的23种设计模式[转]
查看>>
线程 2
查看>>
[C#][控件]文本类控件
查看>>
[Multimedia][MPEG2]MPEG-2系统原理
查看>>
背包九讲(转)
查看>>
HDU5988 Coding Contest(浮点费用流)
查看>>