这题topsort为什么会有问题(附代码)
题目已经贴过了:http://topic.csdn.net/u/20120810/23/f3c8cc94-62c4-4285-986e-118a05fb03f8.html
但是,问题还没有解决。
def topsort(G, t): #拓扑排序 count = dict((u, 0) for u in G) for u in G: for v in G[u]: count[v] += 1 Q = [u for u in G if count[u] == 0] ret = [] while Q: u = Q.pop() ret.append(u) for v in G[u]: count[v] -= 1 if count[v] == 0: Q.append(v) return retdef connect(G, s): #得到从s出发能到达的结点 Q, P = deque(), set() Q.append(s) while Q: u = Q.popleft() if u in P: continue P.add(u) for v in G[u]: Q.append(v) return Pt = raw_input().split(' ')N, M = int(t[0]), int(t[1])G = {i+1:set() for i in range(N)}#G是连通图,每个节点间只有一条(可以双向)路road = {}#记录每个结点间的路的条数for i in range(M): t = raw_input().split(' ') s,e = int(t[0]), int(t[1]) G[s].add(e) key = (s,e) if road.has_key(key): road[key] += 1 else: road[key] = 1#only consider connected componentconP = connect(G, 1)#得到从1出发能到达的结点if N not in conP: print(0)else: for u in G:#清楚不能达到的结点,如果这些结点中有环是不影响结果的 if u not in conP: G[u].clear() tps = topsort(G, N) count = dict((u,0) for u in G) count[1] = 1 if 1 in tps and N in tps:#无环 tps.reverse() while tps: u = tps.pop() for v in G[u]: count[v] += count[u] * road[(u,v)]#到达v的路的条数是到达父结点路数*从该父结点到达该结点的路数 print(count[N]) else:#1或N有一个得到不了,就是有环 print('INFINITE PATHS')