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

C++ प्रोग्राम: अधिकतम एज-डिस्जॉइंट पथ की संख्या ज्ञात करना


यह दो वर्टेक्स के बीच सबसे छोटे सबसेट पथ या अधिकतम प्रवाह का अर्थ रखने वाले अधिकतम एज-डिस्जॉइंट पथ की संख्या ज्ञात करने के लिए एक C++ प्रोग्राम है।

एल्गोरिदम:

Begin    function bfs() returns true if there is path from source s to sink t in    the residual graph which indicates additional possible flow in the graph. End Begin    function findDisPath() is used to return maximum flow in given graph:    A) Initiate flow as 0.    B) If there is an augmenting path from source to sink, add the path to flow.    C) Return flow. End

उदाहरण कोड

#include <iostream> #include <climits> #include <cstring> #include <queue> #define n 7 using namespace std; bool bfs(int g[n][n], int s, int t, int par[]) {    bool visit[n];    memset(visit, 0, sizeof(visit));    queue <int> q;    q.push(s);    visit[s] = true;    par[s] = -1;    while (!q.empty())    {       int u = q.front();       q.pop();       for (int v=0; v<n; v++)       {          if (visit[v]==false && g[u][v] > 0)          {             q.push(v);             par[v] = u;             visit[v] = true;          }       }    }    return (visit[t] == true); } int findDisPath(int G[n][n], int s, int t) {    int u, v;    int g[n][n];    for (u = 0; u < n; u++)    {       for (v = 0; v < n; v++)       g[u][v] = G[u][v];    }    int par[n];    int max_flow = 0;    while (bfs(g, s, t,par))    {       int path_flow = INT_MAX;       for (v=t; v!=s; v=par[v])       {          u = par[v];          path_flow = min(path_flow, g[u][v]);       }       for (v = t; v != s; v = par[v])       {          u = par[v];          g[u][v] -= path_flow;          g[v][u] += path_flow;       }       max_flow += path_flow;    }    return max_flow; } int main() {    int g[n][n] = {{0, 6, 7, 1},       {0, 0, 4, 2},       {0, 5, 0, 0},       {0, 0, 19, 12},       {0, 0, 0, 17},       {0, 0, 0, 0,}};    int s=0,d=3;    cout << " There exist maximum" <<" "<< findDisPath(g, s, d)<< " edgedisjoint paths from " << s <<" to "<<d;    return 0; }

आउटपुट

There exist maximum 3 edge-disjoint paths from 0 to 3
  1. - C++ प्रोग्राम: डिस्जॉइंट सेट डेटा स्ट्रक्चर इम्प्लीमेंट करें

    डिस्जॉइंट सेट मूल रूप से सेट्स का एक समूह है जहां कोई आइटम एक से अधिक सेट में नहीं हो सकता। यह सबसेट्स पर यूनियन और फाइंड ऑपरेशन का समर्थन करता है। Find(): इसका उपयोग यह पता लगाने के लिए किया जाता है कि कोई विशेष तत्व किस सबसेट में है और उस विशेष सेट के प्रतिनिधि को लौटाता है। Union(): यह दो अलग-अल

  1. - C++ प्रोग्राम: ग्राफ की एज कनेक्टिविटी खोजें

    इस प्रोग्राम में हमें ग्राफ की एज कनेक्टिविटी खोजने की आवश्यकता है। ग्राफ की एज कनेक्टिविटी का अर्थ है कि यह एक ब्रिज है, इसे हटाने पर ग्राफ डिस्कनेक्ट हो जाएगा। डिस्कनेक्टेड अनडायरेक्टेड ग्राफ में ब्रिज को हटाने पर कनेक्टेड कंपोनेंट्स की संख्या बढ़ जाती है। फंक्शन और छद्मकोड: Begin    Fu

  1. - C++ प्रोग्राम: ग्राफ में आर्टिकुलेशन पॉइंट्स की संख्या खोजें

    ग्राफ में आर्टिकुलेशन पॉइंट्स (या कट वर्टेक्स) एक पॉइंट है यदि इसे हटाने पर (और इसके माध्यम से एज) ग्राफ डिस्कनेक्ट हो जाता है। एक डिस्कनेक्टेड अनडायरेक्टेड ग्राफ के लिए एक आर्टिकुलेशन पॉइंट एक वर्टेक्स है जिसे हटाने पर कनेक्टेड कंपोनेंट्स की संख्या बढ़ जाती है। एल्गोरिदम Begin    हम यहां