2010-03-01 8 views

उत्तर

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 
>>> 

तुम भी एक बूलियन मान के रूप में परिणाम का उपयोग कर सकते

>>> 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
  • dijkstra_path(G, source, target)

    जी एक भारित ग्राफ में लक्षित करने के लिए स्रोत से कम से कम पथ रिटर्न

+0

क्या होगा यदि पथ 2 दिए गए नोड्स के बीच मौजूद नहीं है? फ़ंक्शन फिर वापस क्या करता है? – Bruce

+1

मैं सबसे छोटा रास्ता नहीं खोजना चाहता हूं। मैं सिर्फ यह जानना चाहता हूं कि 2 दिए गए नोड्स के बीच कोई पथ मौजूद है या नहीं। – Bruce

7

उपयोग

shortest_path(G, source, target) 

या शोर्टेस्ट पाथ तरीकों में से एक। उन तरीकों से स्पष्ट रहें जो सभी नोड्स के बीच पथ लौटाते हैं, हालांकि यदि आपके पास कनेक्टिविटी के लिए परीक्षण करने के लिए केवल दो विशिष्ट नोड्स हैं।

10

एक असंबंधित समूह डेटा संरचना का उपयोग करना:

एक सिंगलटन ग्राफ में हर शिखर के लिए सेट बनाएं, फिर संघ सेट ग्राफ में हर बढ़त के लिए शीर्षों की इस जोड़ी में दोनों हैं।

अंत में, आप जानते हैं कि एक रास्ता दो कोने के बीच मौजूद है अगर वे एक ही सेट में हैं।

असंबंधित समूह डेटा संरचना पर wikipedia पेज देखें।

यह पथ खोज एल्गोरिदम का उपयोग करने से कहीं अधिक कुशल है।

+0

क्या यह निर्देशित ग्राफ के लिए काम करेगा? – ericmjl

+0

ठीक है, मैंने अभी हाल ही में इसे अपने लिए लागू किया है, और यह काम करता है। :-) – ericmjl

17

वहाँ एक ग्राफ में दो नोड्स के बीच एक रास्ता है कि क्या जांच करने के लिए -

>>> 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 

अधिक जानकारी के लिए कृपया उल्लेख has_path — NetworkX 1.7 documentation

संबंधित मुद्दे