32 lines
588 B
Python
32 lines
588 B
Python
|
# https://en.wikipedia.org/wiki/Topological_sorting
|
||
|
|
||
|
|
||
|
def topological_sort(graph):
|
||
|
def dfs(graph, used, order, u):
|
||
|
used[u] = True
|
||
|
for v in graph[u]:
|
||
|
if not used[v]:
|
||
|
dfs(graph, used, order, v)
|
||
|
order.append(u)
|
||
|
|
||
|
n = len(graph)
|
||
|
used = [False] * n
|
||
|
order = []
|
||
|
for i in range(n):
|
||
|
if not used[i]:
|
||
|
dfs(graph, used, order, i)
|
||
|
|
||
|
return order[::-1]
|
||
|
|
||
|
|
||
|
def test():
|
||
|
g = [[] for _ in range(3)]
|
||
|
g[2].append(0)
|
||
|
g[2].append(1)
|
||
|
g[0].append(1)
|
||
|
|
||
|
assert topological_sort(g) == [2, 0, 1]
|
||
|
|
||
|
|
||
|
test()
|