python - 使用邻接矩阵进行广度优先搜索

标签 python breadth-first-search adjacency-list adjacency-matrix

所以我创建了一个 bfs 遍历,它使用一个图和一个起点。它使用相邻列表中表示的图形,但我将如何更改它以使用邻接矩阵。我只需要从某个地方开始

邻接表:

{0:[1,2,3],1:[0,2,3],2:[0,1,4],3:[0,1],4:[2]}

邻接矩阵:

[ [0,1,1,1,0], 
  [1,0,1,1,0], 
  [1,1,0,0,1], 
  [1,1,0,0,0], 
  [0,0,1,0,0] ]

def bfs(graph, v):
  all = []
  Q = []
  Q.append(v)
  while Q != []:
    v = Q.pop(0)
    all.append(v)
    for n in graph[v]:
      if n not in Q and\
      n not in all:
      Q.append(n)
  return all

最佳答案

我曾经遇到过类似的问题,我认为最简单的方法是将矩阵转换为邻接表,即:

def matrix_to_list(matrix):
    graph = {}
    for i, node in enumerate(matrix):
        adj = []
        for j, connected in enumerate(node):
            if connected:
                adj.append(j)
        graph[i] = adj
    return graph

然后您可以对返回的节点列表使用您的规范(和调试)广度优先搜索算法。希望对您有所帮助

关于python - 使用邻接矩阵进行广度优先搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43375515/

相关文章:

python - 来自邻接表的嵌套 JSON

python - 构建用 2 个句点分隔文件名字符串的正则表达式

带有广度优先搜索的 JavaScript 二叉树

JavaScript 算法 : print out the path from directed graph with minimal costs

java - 地下最短路径 - Java

c++ - 对于 C++ 中的图问题,邻接列表或邻接矩阵哪个更好?

python - Matplotlib 不在图例中显示补丁的影线

python - 如何在预测中返回多个项目?

python - kafka python 不传递消息

c++ - 在 C++ 中使用 BFS 获取 2 个顶点之间的路径