from collections import defaultdict
####发现上面的代码有点问题(不知道是不是我的问题),所以我自己写了一个,同时也加深下对于拓扑的了解
class Graph:
# 构造函数
def __init__(self,vertices):
# 创建用处存储图中点之间关系的dict{v: [u, i]}(v,u,i都是点,表示边, ):边集合
self.graph = defaultdict(list)
# 存储图中点的个数
self.V = vertices
# 添加边
def add_edge(self,u,v):
# 添加边
self.graph[u].append(v)
# 获取一个存储图中所有点的状态:dict{key: Boolean}
# 初始时全为False
def set_keys_station(self):
keyStation = {}
key = list(self.graph.keys())
# 因为有些点,没有出边,所以在key中找不到,需要对图遍历找出没有出边的点
if len(key) < self.V:
for i in key:
for j in self.graph[i]:
if j not in key:
key.append(j)
for ele in key:
keyStation[ele] = False
return keyStation
# 拓扑排序
def topologica