Jupyter notebook 编写一个实现桥接检测算法的函数

Jupyter notebook 编写一个实现桥接检测算法的函数,jupyter-notebook,networkx,Jupyter Notebook,Networkx,算法:桥检测算法 要求:连通图G(V,E) 返回桥边缘 桥集={} 对于e(u,v)εe do G'=从G中删除e 断开连接=错误 如果G'中从u开始的BFS未访问v,则 断开连接=真 如果结束 如果断开,则 桥集=桥集U{e} 如果结束 结束 返回桥集 导入所有相关模块/包(如NetworkX等) 使用函数networkx.readgmlto加载小说《Les Misrable》中人物的共现网络。这些数据可从马克·纽曼教授的主页上获得,该主页位于www-personal.umich.edu/m

算法:桥检测算法

要求:连通图G(V,E)

  • 返回桥边缘

  • 桥集={}

  • 对于e(u,v)εe do

  • G'=从G中删除e

  • 断开连接=错误

  • 如果G'中从u开始的BFS未访问v,则

  • 断开连接=真

  • 如果结束

  • 如果断开,则

  • 桥集=桥集U{e}

  • 如果结束

  • 结束

  • 返回桥集


  • 导入所有相关模块/包(如NetworkX等)

  • 使用函数networkx.readgmlto加载小说《Les Misrable》中人物的共现网络。这些数据可从马克·纽曼教授的主页上获得,该主页位于www-personal.umich.edu/mejn/netdata/

  • 调用在Les Misérablenetwork上实现的网桥检测函数,并打印所有检测到的网桥边缘,每行一个边缘

  • 我用的是networkx。 然后读:

    G=nx.read\u gml('lesmis.gml')) 打印(nx.info(G))

    我有这个想法,但不知道如何在jupyter上实现它:复制然后从副本中删除,这样我们就不必在实现中做任何技巧。我真的需要帮助,我被困住了


    到目前为止,这是我的输出: 姓名: 类型:图形 节点数:77 边数:254 平均学位:6.5974
    False

    NetworkX已经有了一个用于网桥搜索的算法:

    [(0,2)、(10,12)、(12,28)、(13,24)、(15,28)、(23,24)]

    如果您需要源代码,您可以找到它并:


    我确实使用了内置函数列表(nx.bridges(G)),但我们不应该这样做。我需要在bfs中删除G的边,但我不确定如何执行。
    import networkx as nx
    
    G = nx.fast_gnp_random_graph(30, 0.08, directed=False, seed=1)
    list(nx.bridges(G))
    
    @not_implemented_for('multigraph')
    @not_implemented_for('directed')
    def bridges(G, root=None):
        chains = nx.chain_decomposition(G, root=root)
        chain_edges = set(chain.from_iterable(chains))
        for u, v in G.edges():
            if (u, v) not in chain_edges and (v, u) not in chain_edges:
                yield u, v