【发布时间】:2016-03-06 23:25:53
【问题描述】:
我正在为一位法官处理一个问题,该问题询问有关查找距它一定距离内的顶点数。必须对图上的所有顶点执行此操作。完整的问题规范可以看 here.我有一些Python代码解决程序,但是太慢了。
import sys, collections
raw_input = sys.stdin.readline
n, m, k = map(int, raw_input().split())
dict1 = collections.defaultdict(set)
ans = {i:[set([i])for j in xrange(k)]for i in xrange(1, n+1)}
for i in xrange(m):
x, y = map(int, raw_input().split())
dict1[x].add(y)
dict1[y].add(x)
for point in dict1:
ans[point][0].update(dict1[point])
for i in xrange(1, k):
for point in dict1:
for neighbour in dict1[point]:
ans[point][i].update(ans[neighbour][i-1])
for i in xrange(1, n+1):
print len(ans[i][-1])
我的代码所做的是最初创建一组点,这些点是每个顶点的直接相邻点(距离为 0 到 1)。之后,它从所有先前找到的邻居的邻居(距离为 2)中为每个顶点创建一组新的邻居。然后它继续这样做,创建一组新的邻居并增加距离,直到达到最终距离。有没有更好的方法来解决这个问题?
【问题讨论】:
标签: python algorithm graph-theory