का उपयोग करके सभी सबसे कम पथ और दूरी ढूँढना सबसे पहले, एक छोटी सी पृष्ठभूमि: मैं मूल ग्राफ एल्गोरिदम (डिज्कास्ट्रा, फ़्लॉइड-वारशॉल, बेलमैन-फोर्ड, आदि) के साथ एक साधारण ग्राफ क्लास बनाने के लिए काम कर रहा हूं। आगामी प्रोग्रामिंग प्रतियोगिता के लिए संदर्भ पत्र।Floyd-Warshall
अब तक मैं फ्लोयड-Warshall की एक कार्य संस्करण है, लेकिन नकारात्मक पक्ष यह है कि अब तक यह केवल मुझे कम से कम दूरी मूल्य दोनों के बीच नोड्स, नहीं कम से कम पथ हो रही है। अधिमानतः मैं इसे पुनर्निर्माण के लिए किसी अन्य फ़ंक्शन को कॉल करने के बजाय एल्गोरिदम के भीतर पथ-निर्माण करना चाहता हूं।
vector< vector<int> > graph //contains the distance values from each node to each other node (graph[1][3] contains the length of the edge from node #1 to node #3, if no edge, the value is INF
vector< vector<int> > path //contains the "stepping stones" on how to reach a given node. path[st_node][end_node] contains the value of the next node on the way from end_node -> st_node
यहाँ उदाहरण ग्राफ डेटा मैं उपयोग कर रहा हूँ है::
यहाँ मैं उपयोग कर रहा हूँ डेटा संरचनाओं पर कुछ जानकारी है
INF 10 INF INF INF INF
INF INF 90 15 INF INF
INF INF INF INF INF 20
INF INF INF INF 20 INF
INF INF 5 INF INF INF
INF INF INF INF INF INF
और यहाँ है वांछित मान "पथ" चर में होना चाहिए (प्रत्येक नोड्स से डिजस्ट्रा चलाकर प्राप्त):
INF 0 4 1 3 2
INF INF 4 1 3 2
INF INF INF INF INF 2
INF INF 4 INF 3 2
INF INF 4 INF INF 2
INF INF INF INF INF INF
यहां कोड का एक लिंक है जिसका मैं वर्तमान में एल्गोरिदम के लिए उपयोग कर रहा हूं: (via PasteBin)।
किसी भी मदद की सराहना की जाएगी!
संपादित करें: मैंने कोशिश की Wikipedia's code पथ मैट्रिक्स उत्पन्न करने के लिए और यहाँ परिणाम है:
INF INF 4 1 3 4
INF INF 4 INF 3 4
INF INF INF INF INF INF
INF INF 4 INF INF 4
INF INF INF INF INF 2
INF INF INF INF INF INF
यह थोड़े से काम करता है लेकिन जब यह "एकल" चरणों का प्रतिनिधित्व करने के लिए आता है मुद्दे हैं। उदाहरण के लिए, नोड 0 से नोड 1 का पथ हर जगह अपरिभाषित है। (लेकिन फिर भी, सुझाव के लिए आपको Nali4Freedom धन्यवाद)
यदि मैं इस आलेख को पढ़ रहा हूं, तो 'ग्राफ़' की पहली पंक्ति के अनुसार नोड # 0 से केवल एक किनारे है, और यह नोड # 1 की ओर जाता है।तो 'पथ' की पहली पंक्ति (या शायद पहला कॉलम) 'इन्फ 1 1 1 1 1' होना चाहिए। मैं क्या खो रहा हूँ? – Beta
आह, मैं देखता हूं कि आप उस हां से कैसे भ्रमित हो सकते हैं। 'ग्राफ़' में प्रत्येक पंक्ति उस नोड से निकलने वाले किनारों को सूचीबद्ध करती है जबकि' पथ 'में प्रत्येक पंक्ति में' नोड # [row_num] 'पाने के लिए पथ होता है। उदाहरण के लिए, सही 'पथ' चार्ट की पहली पंक्ति का अर्थ है कि नोड 5 (कॉल = 5) से नोड 0 (पंक्ति = 0) तक पहुंचने के लिए, पीछे के रास्ते पर अगला नोड नोड 2 है। नोड 0 प्राप्त करने के लिए नोड 2 से हम नोड 4 का उपयोग करते हैं, फिर नोड 3, फिर नोड 1, फिर अंत में हमारे गंतव्य पर नोड 0 –