对于一个有向图,不用拓扑排序,如何判断图中是否存在环?

wqb1979 2002-07-07 10:06:07
清华研究生入学考试题
...全文
1290 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqb1979 2002-07-07
  • 打赏
  • 举报
回复
多谢两位的回答,结帖
atlantis13579 2002-07-07
  • 打赏
  • 举报
回复
应该用图论的方程做

设这个图的邻接矩阵是A

则G不含环当且仅当A,A^2,A^3,.....,A^n这n个矩阵的对角元素都是0



原理如下:

G是有向图,A的第(i,j)个元素a(i,j)是vi到vj的长度为1的链的个数

A^2的(i,j)个元素
a2(i,j)=a(1,i)*a(i,1)+a(2,i)*a(i,2)+...+a(n,i)*a(i,n)

显然,vi到vj的每一条长度为2的链看成两条长度为1的链相连,所以共有

a(1,i)*a(i,1)+a(2,i)*a(i,2)+...+a(n,i)*a(i,n)条,就是a2(i,j)

同理可证,ak(i,j)表示vi到vj的长度为k的链的个数

特别地令i=j

ak(i,i)就是通过vi的长为k的环的个数

显然,若有n个顶点图G存在一个环,则必存在一个长度不超过n的环

因此,G不含环当且仅当A,A^2,A^3,.....,A^n这n个矩阵的对角元素都是0


例如一个图G={{1,2,3},{12,23,31}}

A=[0 1 0;0 0 1;1 0 0]

A^2=[0 0 1;1 0 0;0 1 0]

A^3=[1 0 0;0 1 0;0 0 1]的(1,1)元素不是0,表示G有一个通过v1的长为3的环
langhaixin 2002-07-07
  • 打赏
  • 举报
回复
判断一个有向图是否有连通分量
就可以判断是否有环了

求连通分量就是对一个有向图的遍历问题
可以用深度或是广度优先遍历来做!
wqb1979 2002-07-07
  • 打赏
  • 举报
回复
能具体说说吗?
love_aming 2002-07-07
  • 打赏
  • 举报
回复
还可以用深度优先遍历来实现

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧