首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

这题topsort为什么会有有关问题(附代码)

2012-09-06 
这题topsort为什么会有问题(附代码)题目已经贴过了:http://topic.csdn.net/u/20120810/23/f3c8cc94-62c4-4

这题topsort为什么会有问题(附代码)
题目已经贴过了:http://topic.csdn.net/u/20120810/23/f3c8cc94-62c4-4285-986e-118a05fb03f8.html
但是,问题还没有解决。

Python code
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')

测试的结果是10个case过了4个,所以,有两种出错原因:
1,这个思路有反例子
2,程序有bug
请指点一下,多谢。


[解决办法]
Print the number of different paths from city 1 to city N modulo 1,000,000,000(10^9).

****modulo 1,000,000,000(10^9).****

嗯算法应该没错。估计就这个问题了。

热点排行