优化广度优先搜索

时间:2017-01-07 04:33:36

标签: python-2.7 optimization graph-theory breadth-first-search

我一直在为这个特定的图论problem获得超时错误。我尽可能地尝试优化我的代码但是它仍然没有达到针对这个问题的HackerRank性能标准。为了给你一个基本的运行,我首先假设一个完全连接的图形并在其上运行BFS,避免作为城市道路的边缘。但是我没有为每个测试用例创建实际的图形,而是创建了一个生成器,它让我的BFS函数只迭代当前节点通过村庄边缘连接到的节点。任何关于我如何优化它的提示都将不胜感激。

from collections import deque
T = input()

# BFS
def return_nodes(N,a,edges):
    for i in xrange(1,N+1):
        if i != a and (i,a) not in edges and (a,i) not in edges:
            yield i

def bfs(start,N,edges):
    S,q,dist = set(),deque(),{}
    S.add(start)
    q.append(start)
    dist[start] = 0
    while q:
        current_node = q.popleft()
        for i in return_nodes(N,current_node,edges):
            if i in S: continue
            S.add(i)
            q.append(i)
            dist[i] = dist[current_node] + 1
    return dist

for i in xrange(T):
    N,M = map(int,raw_input().split())
    # Main roads/edges
    main_edges = set()
    for j in xrange(M):
        a,b = map(int,raw_input().split())
        main_edges.add((a,b))
    start = input()
    dist = bfs(start,N,main_edges)
    for k in dist:
        if k != start:
            print dist[k],
    print " "

0 个答案:

没有答案