python判断在有向图中,是否存在环

 记录学习python的过程

import numpy
from numpy import *
def dfs(v):
    vis[v] = -1
    flag = 0
    for i in range(n):
        # print(v,i)
        # print (a[v][i],'---', vis[i] )
        if a[v][i] != 0 and vis[i] != -1:
            dfs(i)
            vis[i] = 1
        else:
            pass

        if a[v][i] != 0 and vis[i] == -1:
            print('Yes, there is A loop in this network\n')
            global swi
            swi = True
            exit()
            return
            # break
        else:
            pass
    print('s = 0')
    return False
global swi
swi = False
edges = [[3,4],[1,2],[1,3],[2,3],[3,4]]
#边的数量,顶点数,第二行以及以后的,第一个为起点,第二个为落点
bian = int(shape(edges)[0]) - 1
print(bian, 'edges in the network')
print(shape(edges))
n,c=map(int,input().split())
a = [([0] * n) for i in range(n)]#有向图的邻接矩阵
vis = [0] * (c+1)
# print(shape(a),shape(vis))
for i in range(1, c + 1):
    s, t = edges[i][0:2]#边的起始点和结束点
    # print (s,'  - ', t )
    s = int(s) - 1
    t = int(t) - 1
    a[s][t] = 1
dfs(0)
if not swi:
    print('No loop, DAG - DAG - DAG')

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值