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

ग्राफ में मैक्सिमम कट खोजने के लिए C++ प्रोग्राम


इस प्रोग्राम में ग्राफ में मैक्सिमम कट खोजने के लिए, हमें ग्राफ की एज कनेक्टिविटी (Edge Connectivity) ज्ञात करनी होती है। एक ग्राफ की एज कनेक्टिविटी का अर्थ है एक ब्रिज (Bridge), जिसे हटाने पर ग्राफ डिस्कनेक्ट हो जाता है। एक डिस्कनेक्टेड अनडायरेक्टेड ग्राफ में ब्रिज को हटाने पर कनेक्टेड कॉम्पोनेंट्स की संख्या बढ़ जाती है।

फंक्शन और स्यूडोकोड

Begin
    Function connections() कनेक्शन खोजने के लिए एक रिकर्सिव फंक्शन है:
    A) वर्तमान नोड को अनविज़िटेड मार्क करें।
    B) टाइम और low मान इनिशियलाइज़ करें।
    C) इस वर्टेक्स से आसन्न सभी वर्टेक्स के माध्यम से जाएं।
    D) जांचें कि क्या x में रूटेड सबट्री का w के पूर्वजों में से किसी एक से कनेक्शन है। यदि x के नीचे सबट्री से पहुंचने योग्य सबसे निचला वर्टेक्स, DFS ट्री में u से नीचे है, तो w-x का एक कनेक्शन है।
    E) पैरेंट फंक्शन कॉल के लिए w का low मान अपडेट करें।
End
Begin
    Function Con() जो connections() का उपयोग करता है:
    A) सभी वर्टेक्स को अनविज़िटेड मार्क करें।
    B) पैरेंट, विज़िटेड, और कनेक्शन इनिशियलाइज़ करें।
    C) ग्राफ में एज के बीच कनेक्शन प्रिंट करें।
End

उदाहरण

#include<iostream> #include <list> #define N -1 using namespace std; class G {    // फंक्शन की घोषणा    int n;    list<int> *adj;    void connections(int n, bool visited[], int disc[], int low[], int par[]);    public:       G(int n); // कंस्ट्रक्टर       void addEd(int w, int x);       void Con(); }; G::G(int n) {    this->n= n;    adj = new list<int> [n]; } // ग्राफ में एज जोड़ें void G::addEd(int w, int x) {    adj[x].push_back(w); // v की सूची में u जोड़ें    adj[w].push_back(x); // u की सूची में v जोड़ें } void G::connections(int w, bool visited[], int dis[], int low[], int par[]) {    static int t = 0;    // वर्तमान नोड को विज़िटेड मार्क करें    visited[w] = true;    dis[w] = low[w] = ++t;    // सभी आसन्न वर्टेक्स के माध्यम से जाएं    list<int>::iterator i;    for (i = adj[w].begin(); i != adj[w].end(); ++i) {       int x = *i; // x वर्तमान आसन्न है       if (!visited[x]) {          par[x] = w;          connections(x, visited, dis, low, par);          low[w] = min(low[w], low[x]);          // यदि x के नीचे सबट्री से पहुंचने योग्य सबसे निचला वर्टेक्स, DFS ट्री में w से नीचे है, तो w-x एक कनेक्शन है          if (low[x] > dis[w])             cout << w << " " << x << endl;       }       else if (x != par[w])       low[w] = min(low[w], dis[x]);    } } void G::Con() {    // सभी वर्टेक्स को अनविज़िटेड मार्क करें    bool *visited = new bool[n];    int *dis = new int[n];    int *low = new int[n];    int *par = new int[n];    for (int i = 0; i < n; i++) {       par[i] = N;       visited[i] = false;    }    // एज कनेक्शन खोजने के लिए connections() फंक्शन कॉल करें    for (int i = 0; i < n; i++)       if (visited[i] == false)          connections(i, visited, dis, low, par); } int main() {    cout << "\nConnections in first graph \n";    G g1(5);    g1.addEd(1, 2);    g1.addEd(3, 2);    g1.addEd(2, 1);    g1.addEd(0, 1);    g1.addEd(1, 4);    g1.Con();    return 0; }

आउटपुट

Connections in first graph 2 3 1 2 1 4 0 1
  1. ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स वाला एक ग्राफ दिया गया है। वर्टेक्स 1 से n तक संख्याबद्ध हैं और edges सरणी में दी गई एज्स से जुड़े हैं। प्रत्येक वर्टेक्स का एक x मान है जो 1 से n के बीच होता है, यह values सरणी में दिया गया है। हमें ग्राफ में सुपर वर्टेक्स खोजने हैं। एक वर्टेक्स i को सुपर वर्टेक्स कहा जाता है

  1. दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1

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

    मान लीजिए n वर्टेक्स और m एज वाला एक भारित, निदेश रहित ग्राफ दिया गया है। ग्राफ का स्कोर ग्राफ में सभी एज भारों का योग है। एज भार ऋणात्मक हो सकते हैं, और यदि उन्हें हटा दिया जाए तो ग्राफ का स्कोर बढ़ जाता है। हमें ग्राफ को संबद्ध रखते हुए एज हटाकर ग्राफ के स्कोर को न्यूनतम करना है। हमें घटाए जा सकन