码迷,mamicode.com
首页 > 其他好文 > 详细

有向图和无向图的环检测

时间:2018-08-17 19:58:07      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:直接   不为   记录   广度优先   父节点   有向图   邻接矩阵   无向图   路径   

1.无向图

并查集:检查每一条边的两个端点是否是相同的连通子图,如果是相同的,说明存在环;

深度遍历:使用邻接矩阵,只需要用一个数组标记是否访问过,如果访问过且不是该节点的父节点,则有环;

广度优先:可以;

2.有向图

拓扑排序:用一个队列记录入度为0的点,然后将他们去除时,另边的另一头节点的入度减一,不断记录入度为0的点,

     若最后没有入度不为0的点,则没有环,否则有环;不断的插入队尾,循环;

深度遍历:和无向图不同的是,我们不能直接和无向图的深度遍历一样,因为有可能出现,一个节点同时是2个节点的

       孩子节点,但这个时候不是环,所以需要去除标记,或者使用三种标记:0代表节点没有访问过,-1代表节点

         被访问过一次,但它还有孩子节点未被访问完,1代表该节点的深度遍历已经结束;这种方法比较巧妙,不需要

         去除标记;

广度优先:不可以,深度优先记录的是经过的路径,环出现在经过的路径上;

 

有向图和无向图的环检测

标签:直接   不为   记录   广度优先   父节点   有向图   邻接矩阵   无向图   路径   

原文地址:https://www.cnblogs.com/mdumpling/p/9494878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!