Python 2.7 优化广度优先搜索
对于这个特殊的图论,我得到了超时错误。我尽可能地优化我的代码,但它仍然没有达到针对这个问题的HackerRank性能标准。为了给你一个基本的概述,我首先假设一个完全连通的图,并在它上面运行一个BFS,避免了城市道路的边缘。但是,我没有为每个测试用例创建实际的图形,而是创建了一个生成器,让我的BFS函数只遍历当前节点通过村庄边缘连接到的节点。任何关于如何优化它的提示都将不胜感激Python 2.7 优化广度优先搜索,python-2.7,optimization,graph-theory,breadth-first-search,Python 2.7,Optimization,Graph Theory,Breadth First Search,对于这个特殊的图论,我得到了超时错误。我尽可能地优化我的代码,但它仍然没有达到针对这个问题的HackerRank性能标准。为了给你一个基本的概述,我首先假设一个完全连通的图,并在它上面运行一个BFS,避免了城市道路的边缘。但是,我没有为每个测试用例创建实际的图形,而是创建了一个生成器,让我的BFS函数只遍历当前节点通过村庄边缘连接到的节点。任何关于如何优化它的提示都将不胜感激 from collections import deque T = input() # BFS def return_
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 " "
在
N
顶点上生成一个完整的图,然后删除输入中经过的边(即城镇道路),这将留下一个只包含乡村道路的图-然后在这个稀疏图上运行BFS(或Dijkstra算法,没有终点)。我以前做过。这花费了O(N^2)个时间,我收到了更多的超时错误。请维护一组未访问的顶点和要访问的顶点优先级队列(按距离排序,最初,只有距离为零的起始顶点)然后,当每个顶点从优先级队列中移除并被访问时,将其从该未访问集中移除,并仅将那些剩余的未访问顶点(距离增加)添加到优先级队列中,这些顶点未通过道路连接。