所以我看到广泛的第一次搜索正在使用字典实现很多。我只想知道是否可以使用列表列表遍历图形。然后返回父数组。 [每个顶点的父母。]如果是这样,怎么样?说,我有一个像这样的邻接列表
G = [[(1, None), (2, None)], [(0, None)], []]
其中G是有向和未加权的图。因此无。否则它会有一个数字。顶点(0)与顶点(1)和顶点(2)相邻。顶点(1)仅与顶点(0)相邻。顶点(2)与任何顶点都不相邻。
我应该先制作一个新的顶点列表吗?我应该摆脱体重吗?我不知道如何处理这个问题。你能帮忙的话,我会很高兴。感谢
答案 0 :(得分:-1)
当然,无论哪种方式都没问题。您可以像这样表示图表:
g = [[1, 2], [0], []]
然后g[g[j][0]]
将您返回到j
元素的邻接列表中首先出现的顶点的邻接列表。列表列表和密钥为0,...,n
并且其值为int
列表的字典之间没有区别,但在我看来,除非是字典,否则列表是更明智的想法有必要的。如果没有任何体重,那么没有理由让你的所有体重都为None
。
但请注意,BFS将要求您跟踪是否已访问过顶点,您可以在跟踪父母的同时进行:
parents = [None, None, None]
您通常还希望跟踪您访问节点时当前所处的深度(除非您仅测试例如连接),您可以执行以下操作:< / p>
import collections
Vertex = collections.namedtuple("Vertex", ["idx", "depth"])
现在,当您从队列中弹出顶点v
时,您将浏览其邻接列表中的每个u_idx
。如果parents[u_idx] is None
(尚未访问过),请将Vertex(u_idx, v.depth + 1)
推送到您的队列并标记parents[u_idx] = v
。