gpt4 book ai didi

python - 距起始顶点一定距离内的顶点数

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:19:57 25 4
gpt4 key购买 nike

我正在研究一个关于法官的问题,该问题询问如何找到距离它一定距离内的顶点数。必须对图上的所有顶点执行此操作。完整问题规范可见 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)为每个顶点创建一组新的邻居。然后它继续这样做,创建一组新的邻居并增加距离直到达到最终距离。有没有更好的方法来解决这个问题?

最佳答案

有很多又好又快的解决方案。

其中之一(不是最快,但足够快)是使用 BFS 算法达到距离 K。只需运行 bfs,当距离超过 K 时,它不会将所有顶点的邻居添加到队列中。 K 是运动规范中的参数。

关于python - 距起始顶点一定距离内的顶点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35833907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com