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