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

C++ में अनडायरेक्टेड ग्राफ को डायरेक्टेड ग्राफ में बदलना जिससे पाथ लंबाई 1 से अधिक न हो


इस ट्यूटोरियल में, हम अनडायरेक्टेड ग्राफ को डायरेक्टेड ग्राफ में बदलने के प्रोग्राम पर चर्चा करेंगे जिससे कोई पाथ लंबाई 1 से अधिक न हो।

इसके लिए हमें एक अनडायरेक्टेड ग्राफ दिया जाएगा। हमारा कार्य उस ग्राफ को डायरेक्टेड ग्राफ में बदलना है बशर्ते कोई पाथ की लंबाई 1 से अधिक न हो।

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

#define N 100005 

// ग्राफ संग्रहीत करना 
vector<int> gr[N]; 

// प्रत्येक वर्टेक्स का कलर संग्रहीत करना 
int colour[N]; 

vector<pair<int, int> > edges; 
bool bip; 

// ग्राफ में एज जोड़ना 
void add_edge(int x, int y) { 
    gr[x].push_back(y); 
    gr[y].push_back(x); 
    edges.push_back(make_pair(x, y)); 
} 

// जांचना कि दिया गया ग्राफ 
// बाइपार्टाइट है या नहीं 
void dfs(int x, int col) { 
    colour[x] = col; 
    // चाइल्ड वर्टेक्स की ओर बढ़ना 
    for (auto i : gr[x]) { 
        if (colour[i] == -1) 
            dfs(i, col ^ 1); 
        // यदि चाइल्ड और पैरेंट की 
        // समान शाखा हो 
        else if (colour[i] == col) 
            bip = false; 
    } 
} 

// डायरेक्टेड ग्राफ में बदलना 
void convert_directed(int n, int m) { 
    memset(colour, -1, sizeof colour); 
    bip = true; 
    // बाइपार्टाइट फंक्शन कॉल करना 
    dfs(1, 1); 
    if (!bip) { 
        cout << -1; 
        return; 
    } 
    // यदि बाइपार्टाइट संभव है 
    for (int i = 0; i < m; i++) { 
        if (colour[edges[i].first] == 0) 
            swap(edges[i].first, edges[i].second); 
        cout << edges[i].first << " " << edges[i].second << endl; 
    } 
} 

int main() { 
    int n = 4, m = 3; 
    add_edge(1, 2); 
    add_edge(1, 3); 
    add_edge(1, 4); 
    convert_directed(n, m); 
    return 0; 
}

आउटपुट

1 2 1 3 1 4

  1. C++ में स्रोत से k लंबाई से अधिक का पथ मौजूद है या नहीं खोजें C++ में स्रोत से k लंबाई से अधिक का पथ मौजूद है या नहीं खोजें

    अवधारणाएक दिए गए ग्राफ के संबंध में, ग्राफ में एक स्रोत शीर्ष और एक संख्या k (यहां k स्रोत शीर्ष और गंतव्य शीर्ष के बीच ग्राफ के पथ की लंबाई को इंगित करता है), हमारा कार्य यह निर्धारित करना है कि क्या दिया गया स्रोत से शुरू होकर किसी अन्य शीर्ष (यानी गंतव्य) पर समाप्त होने वाला एक सरल पथ (बिना किसी

  1. C++ में अप्रत्यक्ष ग्राफ (Undirected Graph) में सभी चक्र (Cycles) प्रिंट करें C++ में अप्रत्यक्ष ग्राफ (Undirected Graph) में सभी चक्र (Cycles) प्रिंट करें

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

  1. C++ में दिए गए प्रारंभिक वर्ण से सबसे लंबे लगातार पथ की लंबाई ज्ञात करें C++ में दिए गए प्रारंभिक वर्ण से सबसे लंबे लगातार पथ की लंबाई ज्ञात करें

    विभिन्न वर्णों का एक मैट्रिक्स दिया गया है। एक वर्ण से शुरू करके हमें सबसे लंबा पथ ढूंढना है जो उन सभी वर्णों को पार करके जाता है जो वर्तमान वर्ण से बड़े हैं। वर्ण एक-दूसरे के क्रमागत हैं। E से शुरू होता है। सबसे लंबा पथ ढूंढने के लिए, हम डेप्थ फर्स्ट सर्च एल्गोरिदम का उपयोग करेंगे। DFS के दौरान, क