【问题标题】:Is it possible to perform a Breadth First Search with an Array of Neighbors?是否可以使用邻居数组执行广度优先搜索?
【发布时间】: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】:

    解决此问题的最简单方法是构建图表,并使用可用的算法。在 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')]
    

    【讨论】:

      【解决方案2】:

      是否可以仅使用邻居列表执行 BFS?

      邻居列表是 BFS 问题的完美输入。

      (我们称之为邻接表)

      是否将列表转换为图形是一个解释问题。

      您可以使用列表、向量或其他一些简单的数据结构对 BFS 进行编码,

      没有显式地将列表转换为一些“图形类”或其他东西。

      但您可以很容易地绘制概念图以验证输入和输出。

      【讨论】:

        猜你喜欢
        • 2010-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多