class Stack:
def __init__(self):
self.arr = []
def push(self, item):
self.arr.append(item)
def pop(self):
return self.arr.pop(-1)
def getTop(self):
return self.arr[-1]
def __len__(self):
return len(self.arr)
def topologicalSort(matrix
# : list[list[int]]
) -> [0, 1]:
N = len(matrix)
ind = []
stack = Stack()
count = 0
for i in range(N):
ind.append( sum(row[i] for row in matrix))
if ind[i] == 0:
stack.push(i)
while len(stack) > 0:
i = stack.pop()
count += 1
for j in range(N):
if matrix[i][j] == 1:
ind[j] -= 1
if ind[j] == 0:
stack.push(j)
if count == N:
return 0
else:
return 1
try:
t = int(input())
matrixs = []
while (t > 0):
matrix = []
t -= 1
n = int(input())
while (n > 0):
n -= 1
snums = input().split()
nums = []
for snum in snums:
nums.append(int(snum))
matrix.append(nums)
matrixs.append(matrix)
for matrix in matrixs:
print(topologicalSort(matrix))
except:
pass
拓扑排序判断图是否有环(Python)
最新推荐文章于 2023-12-04 08:54:06 发布