इस ट्यूटोरियल में, हम अप्रत्यक्ष ग्राफ़ को एक निर्देशित ग्राफ़ में बदलने के लिए एक प्रोग्राम पर चर्चा करेंगे, जैसे कि 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