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

सबसे छोटे पथ के लिए बेलमैन-फोर्ड एल्गोरिदम


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

सबसे छोटे पथ के लिए बेलमैन-फोर्ड एल्गोरिदम


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

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

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

एल्गोरिदम

bellmanFord(dist, pred, source)

इनपुट: दूरी सूची, पूर्ववर्ती सूची, और स्रोत शीर्ष।
आउटपुट: जब नकारात्मक चक्र मिला तो सच।

शुरू     iCount := 1     maxEdge := n * (n - 1) / 2       //n शीर्षों की संख्या है     ग्राफ के सभी शीर्ष v के लिए, करें       dist[v] := ∞       pred[v] := φ     किया     dist[source] := 0     eCount := ग्राफ में मौजूद किनारों की संख्या     edgeList नामक एज सूची बनाएं     जब तक iCount < n, करें       i := 0 से eCount तक, करें         यदि dist[edgeList[i].v] > dist[edgeList[i].u] + (किनारे i के लिए cost[u,v])           dist[edgeList[i].v] > dist[edgeList[i].u] + (किनारे i के लिए cost[u,v])           pred[edgeList[i].v] := edgeList[i].u       किया     किया     iCount := iCount + 1     ग्राफ में सभी शीर्ष i के लिए, करें       यदि dist[edgeList[i].v] > dist[edgeList[i].u] + (किनारे i के लिए cost[u,v]),         तो वापस करें सच     किया     वापस करें गलत अंत

उदाहरण

#include<iostream> #include<iomanip> #define V 5 #define INF 999 using namespace std; //ग्राफ का लागत मैट्रिक्स (निर्देशित) शीर्ष 5 int costMat[V][V] = {     {0, 6, INF, 7, INF},     {INF, 0, 5, 8, -4},     {INF, -2, 0, INF, INF},     {INF, INF, -3, 0, 9},     {2, INF, 7, INF, 0} }; typedef struct {     int u, v, cost; }edge; int isDiagraph() {     //जांचें कि ग्राफ निर्देशित है या नहीं     int i, j;     for(i = 0; i dist[edgeList[i].u] + costMat[edgeList[i].u][edgeList[i].v]) {         //किनारे को रिलैक्स करें और पूर्ववर्ती सेट करें           dist[edgeList[i].v] = dist[edgeList[i].u] + costMat[edgeList[i].u][edgeList[i].v];           pred[edgeList[i].v] = edgeList[i].u;         }       }       icount++;     }     //नकारात्मक चक्र के लिए परीक्षण     for(int i = 0; i dist[edgeList[i].u] + costMat[edgeList[i].u][edgeList[i].v]) {         return 1;       //इंगित करता है कि ग्राफ में नकारात्मक चक्र है       }     }     return 0;       //कोई नकारात्मक चक्र नहीं } void display(int *dist, int *pred) {     cout << "Vert: ";     for(int i = 0; i

आउटपुट

Source Vertex: 2 Vert: 0 1 2 3 4 Dist: -4 -2 0 3 -6 Pred: 4 2 -1 0 1 The graph has no negative edge cycle

  1. डेटा संरचना में येन का k-सबसे छोटा पथ एल्गोरिदम (Yen s k-Shortest Path Algorithm) डेटा संरचना में येन का k-सबसे छोटा पथ एल्गोरिदम (Yen's k-Shortest Path Algorithm)

    एकल सबसे छोटा पथ देने के बजाय, येन का k-सबसे छोटा पथ एल्गोरिदम k सबसे छोटे पथ देता है ताकि हम दूसरा सबसे छोटा पथ और तीसरा सबसे छोटा पथ और इसी तरह प्राप्त कर सकें। आइए एक परिदृश्य पर विचार करें कि हमें स्थान A से स्थान B तक यात्रा करनी है और स्थान A और स्थान B के बीच कई मार्ग उपलब्ध हैं, लेकिन हमें

  1. C++ में बेलमैन-फोर्ड एल्गोरिदम C++ में बेलमैन-फोर्ड एल्गोरिदम

    बेलमैन-फोर्ड एल्गोरिदम एक डायनामिक प्रोग्रामिंग एल्गोरिदम है जिसका उपयोग किसी भी शीर्ष के सबसे छोटे पथ को खोजने के लिए किया जाता है जिसे एक शीर्ष से प्रारंभिक शीर्ष के रूप में माना जाता है। यह एल्गोरिदम पुनरावृत्त विधि का पालन करता है और लगातार सबसे छोटा पथ खोजने का प्रयास करता है। बेलमैन-फोर्ड एल्

  1. डिस्ट्रिब्यूटेड शेयर्ड मेमोरी लागू करने के लिए एल्गोरिदम डिस्ट्रिब्यूटेड शेयर्ड मेमोरी लागू करने के लिए एल्गोरिदम

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