How do I get the vertices on the shortest path using igraph?

后端 未结 3 743
北恋
北恋 2021-01-12 03:20

I\'m using igraph to generate a matrix of shortest path distances between pairs of vertices but I can\'t figure out how to return the vertices. So far I have:

相关标签:
3条回答
  • 2021-01-12 04:12

    The function you need is get_shortest_paths I believe. See https://igraph.org/python/doc/igraph.GraphBase-class.html#get_shortest_paths

    You need to call it individually for each source vertex, and it will give you only a single (arbitrary) shortest path for each pair of nodes. If you need all shortest paths, then see get_all_shortest_paths: https://igraph.org/python/doc/igraph.GraphBase-class.html#get_all_shortest_paths

    0 讨论(0)
  • 2021-01-12 04:13

    This is the way to find shortest path for weighted directed graph (DAG). So this what I figured out:

    import igraph
    from igraph import *
    g = Graph(directed=True)
    g.add_vertices(3)
    g.vs["name"]=["GO:1234567","GO:6789056","GO:5674321"]
    g.es["weight"]=1
    g['GO:1234567','GO:6789056']=1
    g['GO:6789056','GO:5674321']=5
    weight=g.es["weight"]
    print weight
    print g.degree(mode="in") 
    print g.shortest_paths_dijkstra(source="GO:1234567", target="GO:5674321", 
        weights=weight, mode=OUT)
    
    0 讨论(0)
  • 2021-01-12 04:18

    I do this

    from igraph import *
    g = Graph([(0,1), (0,2), (2,3), (3,4), (4,2), (2,5), (5,0), (6,3), (5,6)])
    g.vs["name"] = ["Alice", "Bob", "Claire", "Dennis", "Esther", "Frank", "George"]
    #You could create Vertexes like g.add_vertex(name="Bill") 
    path=g.get_shortest_paths("Alice",to="Frank",mode=OUT,output='vpath')
    for n in path[0]:
        print("{}".format(g.vs[n]['name']))
    

    Hope this helps

    0 讨论(0)
提交回复
热议问题