使用列表列表在Python中首先遍历广度图

时间:2015-03-19 09:24:40

标签: python algorithm list graph breadth-first-search

所以我看到广泛的第一次搜索正在使用字典实现很多。我只想知道是否可以使用列表列表遍历图形。然后返回父数组。 [每个顶点的父母。]如果是这样,怎么样?说,我有一个像这样的邻接列表

  G =  [[(1, None), (2, None)], [(0, None)], []]

其中G是有向和未加权的图。因此无。否则它会有一个数字。顶点(0)与顶点(1)和顶点(2)相邻。顶点(1)仅与顶点(0)相邻。顶点(2)与任何顶点都不相邻。

我应该先制作一个新的顶点列表吗?我应该摆脱体重吗?我不知道如何处理这个问题。你能帮忙的话,我会很高兴。感谢

1 个答案:

答案 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