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

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


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

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

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

हमें नोड्स को टोपोलॉजिकल सॉर्टिंग तकनीक में क्रमबद्ध करने की आवश्यकता है, और टोपोलॉजिकल सॉर्ट के बाद परिणाम को स्टैक में संग्रहीत किया जाता है। उसके बाद स्टैक से बार-बार पॉप करके प्रत्येक शीर्ष के लिए सबसे लंबी दूरी खोजने का प्रयास करें।

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

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

एल्गोरिदम

topoSort(u, visited, stack)

इनपुट: प्रारंभिक नोड u, ट्रैक रखने के लिए देखी गई सूची, स्टैक।

आउटपुट: नोड्स को टोपोलॉजिकल तरीके से क्रमबद्ध करें।

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

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

आउटपुट

Longest Distance From Source Vertex 1 Infinity 0 2 9 8 10

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

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

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

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

  1. पायथन में निर्देशित ग्राफ को उलटने का प्रोग्राम पायथन में निर्देशित ग्राफ को उलटने का प्रोग्राम

    मान लीजिए हमारे पास एक निर्देशित ग्राफ है, हमें इसका उल्टा ढूंढना है ताकि यदि एक किनारा u से v तक जाता है, तो अब यह v से u तक जाए। यहां इनपुट एक एडजेंसी सूची होगी, और यदि n नोड्स हैं, तो नोड्स (0, 1, ..., n-1) होंगे।इसलिए, यदि इनपुट इस तरह हैतो आउटपुट होगाइसे हल करने के लिए, हम इन चरणों का पालन करें