2010-03-01 34 views

risposta

12
>>> import networkx as nx 
>>> G=nx.empty_graph() 
>>> G.add_edge(1,2) 
>>> G.add_edge(2,3) 
>>> G.add_edge(4,5) 
>>> nx.path.bidirectional_dijkstra(G,1,2) 
(1, [1, 2]) 
>>> nx.path.bidirectional_dijkstra(G,1,3) 
(2, [1, 2, 3]) 
>>> nx.path.bidirectional_dijkstra(G,1,4) 
False 
>>> nx.path.bidirectional_dijkstra(G,1,5) 
False 
>>> 

È anche possibile utilizzare il risultato come un valore booleano

>>> if nx.path.bidirectional_dijkstra(G,1,2): print "path exists" 
... 
path exists 
>>> if nx.path.bidirectional_dijkstra(G,1,4): print "path exists" 
... 
>>> 
3
+0

E se percorso non esiste tra i 2 nodi dato? Cosa restituisce la funzione allora? – Bruce

+1

Non voglio trovare il percorso più breve. Voglio solo sapere se esiste un percorso tra 2 nodi dati. – Bruce

7

Usa

shortest_path(G, source, target) 

o uno dei metodi più breve Path. Stai alla larga dai metodi che restituiscono i percorsi tra tutti i nodi, tuttavia se hai solo due nodi specifici da testare per la connettività.

10

Utilizzando una struttura dati insieme disgiunto:

Creare un singoletto impostato per ogni vertice nel grafico, quindi sindacali gli insiemi contenenti ciascuna della coppia di vertici per ogni bordo nel grafico.

Infine, si sa che esiste un percorso tra due vertici se si trovano nello stesso set.

Vedere la pagina wikipedia sulla struttura di dati del set disgiunto.

Questo è molto più efficiente dell'utilizzo di un algoritmo di individuazione dei percorsi.

+0

Funzionerà per grafici diretti? – ericmjl

+0

Bene, l'ho appena implementato per me stesso di recente, e funziona. :-) – ericmjl

17

per verificare se v'è un percorso tra due nodi di un grafo -

>>> import networkx as nx 
>>> G=nx.Graph() 
>>> G.add_edge(1,2) 
>>> G.add_edge(2,3) 
>>> nx.has_path(G,1,3) 
True 
>>> G.add_edge(4,5) 
>>> nx.has_path(G,1,5) 
False 

Per ulteriori informazioni, fare riferimento has_path — NetworkX 1.7 documentation