python找出有向图的所有环_有向图找环的python实现

def findcircle(G):

"""

color = 0 hasn't been visited

color = -1 be visited once

color = 1 has been dfs, all children of the spot has been visited

"""

def dfs(G,i,color,is_DAG):

if is_DAG == 0:

pass

else:

r = len(G)

color[i] = -1 #spot i has been visited

#print 'color:',color

#is_DAG = None

for j in range(r):

if G[i][j] != 0:

#print 'i:',i

#print 'j:',j

if color[j] == -1:

is_DAG = 0

break

elif color[j] == 0:

is_DAG,color = dfs(G,j,color,is_DAG)

color[i] = 1

#print 'is_DAG in :',is_DAG

return is_DAG,color

r = len(G)

color = [0] * r #the number of spots

is_DAG = 1

for i in range(r):

#print 'color:',color

#print 'i:',i

if color[i] == 0: #the spot i has not been visited

is_DAG,color = dfs(G,i,color,is_DAG) #DFS from spot i

#print 'is_DAG out :',is_DAG

if is_DAG == 0: #have circle

break

return is_DAG

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值