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

浪子不回头ぞ 提交于 2019-12-01 01:10:18

问题


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:

path_length_matrix = ig_graph.shortest_paths_dijkstra(None,None,"distance", "ALL")

I'm looking for a function which returns a matrix of paths like the matrix of distances but I can't see anything in the igraph documentation which shows how to get the paths.


回答1:


The function you need is get_shortest_paths I believe. See http://packages.python.org/python-igraph/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: http://packages.python.org/python-igraph/igraph.GraphBase-class.html#get_all_shortest_paths




回答2:


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




回答3:


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)


来源:https://stackoverflow.com/questions/14380796/how-do-i-get-the-vertices-on-the-shortest-path-using-igraph

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!