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

अप्रत्यक्ष ग्राफ को निर्देशित ग्राफ में परिवर्तित करें जैसे कि सी ++ में 1 से अधिक लंबाई का कोई पथ नहीं है

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

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
#define N 100005
//storing the graph
vector<int> gr[N];
//storing colour of each vertex
int colour[N];
vector<pair<int, int> > edges;
bool bip;
//adding edges to the graph
void add_edge(int x, int y){
   gr[x].push_back(y);
   gr[y].push_back(x);
   edges.push_back(make_pair(x, y));
}
//checking if the given graph
//is bipartite
void dfs(int x, int col){
   colour[x] = col;
   //moving to the child vertices
   for (auto i : gr[x]) {
      if (colour[i] == -1)
         dfs(i, col ^ 1);
      //if child and parent having
      //same branch
      else if (colour[i] == col)
         bip = false;
   }
}
//converting into direct graph
void convert_directed(int n, int m){
   memset(colour, -1, sizeof colour);
   bip = true;
   //calling bipartite function
   dfs(1, 1);
   if (!bip) {
      cout << -1;
      return;
   }
   //if bipartite is possible
   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. पता लगाएं कि सी ++ में किसी स्रोत से k लंबाई से अधिक का पथ है या नहीं

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

  1. सभी चक्रों को C++ में एक अप्रत्यक्ष ग्राफ में प्रिंट करें

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

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

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