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

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


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

फंक्शन और छद्मकोड:

Begin    Function connections() कनेक्शन खोजने के लिए एक रिकर्सिव फंक्शन है:    A) वर्तमान नोड को अनविज़िटेड मार्क करें।    B) समय और लो वैल्यू इनिशियलाइज़ करें    C) इससे आसन्न सभी वर्टेक्स से गुजरें    D) जांचें कि क्या x के साथ रूटेड सबट्री का w के पूर्वजों में से एक से कनेक्शन है। यदि x के तहत सबट्री से पहुंच योग्य सबसे निचला वर्टेक्स DFS ट्री में u से नीचे है, तो w-x का कनेक्शन है।    E) पैरेंट फंक्शन कॉल के लिए w के लो वैल्यू को अपडेट करें। 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); //u की सूची में v जोड़ें    adj[w].push_back(x); //v की सूची में u जोड़ें } 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 वर्टेक्स की संख्या दी गई है, कार्य ग्राफ के एज कवर की गणना करना है। एज कवर ग्राफ के हर वर्टेक्स को कवर करने के लिए आवश्यक न्यूनतम एज की संख्या खोजना है। जैसे हमारे पास n = 5 है तो इसका ग्राफ ऐसा होगा: इसका एज कवर 3 है आइए एक और उदाहरण लेते हैं जहां n = 8 है और इसका एज कवर होगा: 4 उ