问题描述
程序的输入是这样的:
1 2
2 3
2 5
5 1
3 4
4 5
4 6
第一个数字代表顶点 1,第二个数字代表顶点 2。这意味着有一条边连接两个顶点,这意味着它们是邻居。 1[我的问题是,是否可以仅使用邻居列表来执行 BFS? 或者我需要将数据转换成图表吗?
任何帮助,将不胜感激!
1楼
最简单的方法是构建一个图,并使用可用的算法。 在 NetworkX foe 实例中,您有一组基本算法,用于在进行广度优先搜索图的节点。 所以你可以这样做:
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')]
2楼
是否可以仅使用邻居列表来执行 BFS?
邻居列表是 BFS 问题的完美输入。
(我们称之为邻接表)
将列表转换为图形与否是一个解释问题。
你可以用列表编码 BFS,使用向量或其他一些简单的数据结构,
无需将列表显式转换为某些“图形类”或其他内容。
但是绘制概念图以验证输入和输出对您来说很容易。