# Convert the undirected graph into directed graph such that there is no path of length greater than 1 in C++

In this tutorial, we will be discussing a program to convert the undirected graph into a directed graph such that there is no path of length greater than 1.

For this we will be provided with an undirected graph. Our task is to convert that graph into a direct one given no path has a length greater than 1.

## Example

Live Demo

#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;
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;
convert_directed(n, m);
return 0;
}

## Output

1 2
1 3
1 4

Updated on: 22-Jan-2020

116 Views