【发布时间】:2020-03-21 22:18:03
【问题描述】:
程序的输入是这样的:
1 2
2 3
2 5
5 1
3 4
4 5
4 6
第一个数字代表顶点一,第二个数字代表顶点2。这意味着有一条边连接两个顶点,这意味着它们是邻居。 1[ 我的问题是,是否可以仅使用邻居列表执行 BFS?或者我需要将数据转换成图表吗?
任何帮助将不胜感激!
【问题讨论】:
标签: python list graph networkx graph-theory
程序的输入是这样的:
1 2
2 3
2 5
5 1
3 4
4 5
4 6
第一个数字代表顶点一,第二个数字代表顶点2。这意味着有一条边连接两个顶点,这意味着它们是邻居。 1[ 我的问题是,是否可以仅使用邻居列表执行 BFS?或者我需要将数据转换成图表吗?
任何帮助将不胜感激!
【问题讨论】:
标签: python list graph networkx graph-theory
解决此问题的最简单方法是构建图表,并使用可用的算法。在 NetworkX 敌人实例中,您有一组基本算法用于广度优先 在 nx.algorithms.traversal 中搜索图的节点。所以你可以这样做:
s = '''1 2
2 3
2 5
5 1
3 4
4 5
4 6'''
l = [i.split() for i in s.splitlines()]
然后从边列表构建一个图:
import networkx as nx
G = nx.from_edgelist(l)
并使用上述模块中的可用方法,例如从源头开始在广度优先搜索中迭代边缘:
list(nx.algorithms.traversal.breadth_first_search.bfs_edges(G, '2'))
# [('2', '1'), ('2', '3'), ('2', '5'), ('3', '4'), ('4', '6')]
【讨论】:
是否可以仅使用邻居列表执行 BFS?
邻居列表是 BFS 问题的完美输入。
(我们称之为邻接表)
是否将列表转换为图形是一个解释问题。
您可以使用列表、向量或其他一些简单的数据结构对 BFS 进行编码,
没有显式地将列表转换为一些“图形类”或其他东西。
但您可以很容易地绘制概念图以验证输入和输出。
【讨论】: