Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

निर्देशित चक्ररहित ग्राफ में सबसे छोटा पथ


एक भारित निर्देशित चक्ररहित ग्राफ दिया गया है। एक स्रोत शीर्ष भी प्रदान किया गया है। अब हमें ग्राफ में प्रारंभिक नोड से अन्य सभी शीर्षों तक की सबसे छोटी दूरी खोजनी है।

छोटी दूरी का पता लगाने के लिए, हम नकारात्मक भार वाले ग्राफ के लिए बेलमैन-फोर्ड जैसे अन्य एल्गोरिदम का उपयोग कर सकते हैं, सकारात्मक भार के लिए डिज्क्स्ट्रा का एल्गोरिदम भी सहायक है। यहाँ निर्देशित चक्ररहित ग्राफ के लिए, हम जटिलता कम करने के लिए टोपोलॉजिकल सॉर्टिंग तकनीक का उपयोग करेंगे।

निर्देशित चक्ररहित ग्राफ में सबसे छोटा पथ

इनपुट और आउटपुट

इनपुट: ग्राफ का लागत मैट्रिक्स। 0 5 3 -∞ -∞ -∞ -∞ 0 2 6 -∞ -∞ -∞ -∞ 0 7 4 2 -∞ -∞ -∞ -∞ 0 -1 1 -∞ -∞ -∞ -∞ -∞ 0 -2 -∞ -∞ -∞ -∞ -∞ -∞ 0 आउटपुट: स्रोत शीर्ष 1 से सबसे छोटी दूरी अनंत 0 2 6 5 3

एल्गोरिदम

topoSort(u, visited, stack)

इनपुट: प्रारंभिक नोड u, ट्रैक रखने के लिए देखी गई सूची, स्टैक।
आउटपुट: नोड्स को टोपोलॉजिकल तरीके से क्रमबद्ध करें।

शुरू     u को देखा गया चिह्नित करें     u के साथ जुड़े सभी शीर्ष v के लिए, करें       यदि v नहीं देखा गया है, तो           topoSort(v, visited, stack)     किया     u को स्टैक में पुश करें अंत

shortestPath(start)

इनपुट: प्रारंभिक नोड।
आउटपुट: प्रारंभिक नोड से सभी शीर्षों की सबसे छोटी दूरी की सूची।

शुरू     प्रारंभ में सभी नोड्स को अनदेखा करें     ग्राफ में प्रत्येक नोड i के लिए, करें       यदि i नहीं देखा गया है, तो           topoSort(i, visited, stack)     किया     सभी शीर्षों की दूरी को ∞ बनाएं     dist[start] := 0     जब तक स्टैक खाली नहीं है, करें       स्टैक आइटम को पॉप करें और nextVert में लें       यदि dist[nextVert] ≠ ∞, तो           nextVert के साथ आसन्न प्रत्येक शीर्ष v के लिए, करें             यदि cost[nextVert, v] ≠ ∞, तो               यदि dist[v] > dist[nextVert] + cost[nextVert, v], तो                 dist[v] := dist[nextVert] + cost[nextVert, v]           किया       किया     किया     ग्राफ में सभी शीर्ष i के लिए, करें       यदि dist[i] = ∞, तो           अनंत प्रदर्शित करें       अन्यथा           dist[i] प्रदर्शित करें     किया अंत

उदाहरण

#include<iostream> #include<stack> #define NODE 6 #define INF 9999 using namespace std; int cost[NODE][NODE] = {     {0, 5, 3, INF, INF, INF},     {INF, 0, 2, 6, INF, INF},     {INF, INF, 0, 7, 4, 2},     {INF, INF, INF, 0, -1, 1},     {INF, INF, INF, INF, 0, -2},     {INF, INF, INF, INF, INF, 0} }; void topoSort(int u, bool visited[], stack<int>&stk) {     visited[u] = true;      //नोड v को देखा गया सेट करें     for(int v = 0; v dist[nextVert] +cost[nextVert][v])dist[v] = dist[nextVert] + cost[nextVert][v];           }         }       }     for(int i = 0; i

आउटपुट

Shortest Distance From Source Vertex 1 Infinity 0 2 6 5 3

  1. C++ में डायरेक्टेड ग्राफ़ कनेक्टेड है या नहीं जांचें C++ में डायरेक्टेड ग्राफ़ कनेक्टेड है या नहीं जांचें

    ग्राफ़ की कनेक्टिविटी जांचने के लिए, हम किसी भी ट्रैवर्सल एल्गोरिदम का उपयोग करके सभी नोड्स को ट्रैवर्स करने का प्रयास करेंगे। ट्रैवर्सल पूरा होने के बाद, यदि कोई नोड ऐसा है जिसे विज़िट नहीं किया गया है, तो ग्राफ़ कनेक्टेड नहीं है।डायरेक्टेड ग्राफ़ के लिए, हम सभी नोड्स से ट्रैवर्सल शुरू करके कनेक्टि

  1. C++ प्रोग्राम: जांचें कि निर्देशित ग्राफ (Directed Graph) में यूलरियन पथ है या नहीं C++ प्रोग्राम: जांचें कि निर्देशित ग्राफ (Directed Graph) में यूलरियन पथ है या नहीं

    यूलर पथ एक ऐसा पथ है जिसके द्वारा हम प्रत्येक एज को ठीक एक बार विजिट कर सकते हैं। हम समान वर्टेक्स का उपयोग कई बार कर सकते हैं। एक ग्राफ जिसमें यूलर सर्किट होता है, इस मामले में भी माना जाता है, क्योंकि इसमें यूलर पथ भी होता है। यह जांचने के लिए कि एक निर्देशित ग्राफ में यूलर पथ है या नहीं, हमें इ

  1. ग्राफ के माध्यम से सबसे छोटा पथ गणना करने के लिए डिज्क्स्ट्रा एल्गोरिदम ग्राफ के माध्यम से सबसे छोटा पथ गणना करने के लिए डिज्क्स्ट्रा एल्गोरिदम

    परिभाषा डिज्क्स्ट्रा एल्गोरिदम एक विशेष नोड से, जिसे सोर्स नोड कहा जाता है, ग्राफ में हर दूसरे नोड तक सबसे छोटा पथ ढूंढता है। यह सोर्स नोड को रूट के साथ एक शॉर्टेस्ट पाथ ट्री उत्पन्न करता है। यह कंप्यूटर नेटवर्क में रूटिंग लागत को कम करने के उद्देश्य से इष्टतम रूट उत्पन्न करने के लिए गहराई से उपयोग