Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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++ प्रोग्राम डिसजॉइंट सेट डेटा स्ट्रक्चर को लागू करने के लिए

    डिसजॉइंट सेट मूल रूप से सेट के समूह के रूप में होता है जहां कोई भी आइटम एक से अधिक सेट में नहीं हो सकता है। यह संघ का समर्थन करता है और सबसेट पर संचालन ढूंढता है। ढूंढें (): इसका उपयोग यह पता लगाने के लिए किया जाता है कि कोई विशेष तत्व किस उपसमुच्चय में है और उस विशेष सेट का प्रतिनिधि देता है। संघ

  1. सी ++ प्रोग्राम एक ग्राफ की एज कनेक्टिविटी का पता लगाने के लिए

    इस कार्यक्रम में हमें एक ग्राफ की एज कनेक्टिविटी को खोजने की जरूरत है। ग्राफ़ के ग्राफ़ की एक एज कनेक्टिविटी का अर्थ है कि यह एक पुल है, इसे हटाने से ग्राफ़ डिस्कनेक्ट हो जाएगा। डिस्कनेक्ट किए गए अप्रत्यक्ष ग्राफ़ में पुल को हटाने के साथ जुड़े घटकों की संख्या बढ़ जाती है। कार्य और छद्म कोड: Begin &n

  1. C++ प्रोग्राम ग्राफ़ में आर्टिक्यूलेशन पॉइंट्स की संख्या ज्ञात करने के लिए

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