我一直在为这个特定的图论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 " "