样例图片
python代码:
from queue import PriorityQueue as pQueue
import sys
sys.setrecursionlimit(100000)
# 这是最常见的拓扑排序,0入度集合可以用队列,栈等等,只要能存储0入度的点就行
# 这里用了队列,其实就是跟广搜bfs差不多,入度为0的才入队
def ts_bfs(inDegrees, graph):
n = len(graph)
result = ''
q = []
vis = [False] * n
for i, inDegree in enumerate(inDegrees):
if inDegree == 0:
q.append(i)
vis = True
while q:
s = q.pop(0)
result += str(s)
for sub in graph:
if not vis[sub]:
inDegrees[sub] -= 1
if inDegrees[sub] == 0:
q.append(sub)
return result if len(result) == n else 'The graph is not DAG'
# 满足拓扑排序下,序号从小到大排序或字典序排序
def ts_bfs_pq(inDegrees, graph):
n = len(graph)
result = ''
q = pQueue()
vis = [False] * n
for i, inDegree in enumerate(inDegrees):
if inDegree == 0:
q.put(i)
vis = True
while not q.empty():
s = q.get()
result += str(s)