2013-01-17 11 views
5

Używam igraph do generowania macierzy o najkrótszych odległościach między parami wierzchołków, ale nie mogę wymyślić, jak zwrócić wierzchołki. Do tej pory mam:Jak uzyskać wierzchołki na najkrótszej ścieżce za pomocą funkcji igraph?

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

szukam funkcji, która zwraca macierz ścieżek jak macierzy odległości, ale nie widzę nic w igraph documentation która pokazuje, jak uzyskać ścieżki.

Odpowiedz

13

Funkcja, której potrzebujesz, to get_shortest_paths. Zobacz http://packages.python.org/python-igraph/igraph.GraphBase-class.html#get_shortest_paths Musisz wywołać to osobno dla każdego wierzchołka źródłowego, a dostaniesz tylko jedną (dowolną) najkrótszą ścieżkę dla każdej pary węzłów. Jeśli potrzebujesz wszystkich najkrótszych ścieżek, a następnie zobaczyć get_all_shortest_paths: http://packages.python.org/python-igraph/igraph.GraphBase-class.html#get_all_shortest_paths

+0

To wygląda tak, jak powinien pomóc, chociaż nie jest to ostrzeżenie, aby nie używać tej klasy w na górze i zamiast tego użyj "igraph.Graph". Chyba ta funkcja nie została jeszcze dodana do 'igraph.Graph'. –

+4

Czy "igraph.Graph" nie dziedziczy metod z 'igraph.GraphBase'? Nie jestem pewien siebie, po prostu prosząc ... –

+2

Tak to robi. Mając odrobinę mgły mózgowej. Dzięki. –

2

zrobić to

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'])) 

Nadzieja to pomaga

Powiązane problemy