我将在这个链接中关闭伪代码,但我似乎无法让它工作以检测 SCC 或任何循环。尝试检测边缘列表中的循环任何帮助表示赞赏。
class Solution:
def canFinish(self, numCourses: int, prerequisites: List[List[int]]) -> bool:
if len(prerequisites) == 0:
return True
adj = defaultdict(list)
inv = defaultdict(list)
for i, j in prerequisites:
if i ==j: return False
adj[j].append(i)
inv[i].append(j)
topo = []
visited = set()
def toposort(head):
if head in visited: return
visited.add(head)
for neighbor in adj[head]:
toposort(head)
topo.append(head)
for i in range(numCourses):
toposort(i)
assigned = set()
scc = defaultdict(list)
def kos(u, root):
if u in assigned: return
assigned.add(u)
scc[root].append(u)
for neighbor in inv[u]:
kos(neighbor, root)
for i in reversed(topo):
kos(i, i)
print(scc)
return max(len(v) for v in scc.values()) <= 1