第1关:图的建立
1. 添加边
self.graph[u].append(v); self.graph[v].append(u)
2. 删除边
self.graph[u].remove(v); self.graph[v].remove(u)
第2关:图中桥的判别
return deepcopy(self).removeEdge(u,v).connectedComponents()>self.connectedComponents()
注明:这样做的前提是你在 `removeEdge` 最后加入 `return self`
第3关:欧拉图的判别
return False if self.connectedComponents()-1 or [0for i in range(self.V) if len(self.graph[i])%2!=0] else True
第4关:Fleury算法求欧拉回路
if not self.isEulerian(): return
def cur(v):
if not self.graph[v]: return [v]
for ui in range(len(self.graph[v])):
u = self.graph[v][ui]
if not self.isBridge(u, v) or ui == len(self.graph[v])-1:
self.removeEdge(u, v); return [v]+cur(u)
return cur(startVertex)