Check if incoming edges in a vertex of directed graph is equal to vertex itself or not
Last Updated :
09 Sep, 2021
Given a directed Graph G(V, E) with V vertices and E edges, the task is to check that for all vertices of the given graph, the incoming edges in a vertex is equal to the vertex itself or not.
Examples:
Input:
Output: Yes
Explanation:
For vertex 0 there are 0 incoming edges, for vertex 1 there is 1 incoming edge. Same for vertex 2 nd 3.
Approach: The idea is to traverse adjacency list for every vertex, and increment the count of edges of every vertex that has an incoming edge from i. Repeat the steps for every vertex and then check the in degrees for all the vertices equal to vertex value or not.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void add_edge(vector< int > adj[],
int x, int y)
{
adj[x].push_back(y);
}
bool Indegree(vector< int > adj[], int v)
{
int indeg[v] = { 0 };
for ( int i = 0; i < v; i++) {
for ( int j = 0; j < adj[i].size(); j++) {
indeg[adj[i][j]]++;
}
}
for ( int i = 0; i < v; i++) {
if (i == indeg[i])
continue ;
else
return false ;
}
return true ;
}
int main()
{
int v = 4;
vector< int > adj[v];
add_edge(adj, 0, 1);
add_edge(adj, 1, 2);
add_edge(adj, 0, 2);
add_edge(adj, 0, 3);
add_edge(adj, 1, 3);
add_edge(adj, 2, 3);
if (Indegree(adj, v))
cout << "Yes" ;
else
cout << "No" ;
}
|
Java
import java.util.*;
class GFG{
static void add_edge(Vector<Integer> adj[],
int x, int y)
{
adj[x].add(y);
}
static boolean Indegree(Vector<Integer> adj[],
int v)
{
int indeg[] = new int [v];
for ( int i = 0 ; i < v; i++)
{
for ( int j = 0 ; j < adj[i].size(); j++)
{
indeg[adj[i].get(j)]++;
}
}
for ( int i = 0 ; i < v; i++)
{
if (i == indeg[i])
continue ;
else
return false ;
}
return true ;
}
public static void main(String[] args)
{
int v = 4 ;
@SuppressWarnings ( "unchecked" )
Vector<Integer> []adj = new Vector[v];
for ( int i = 0 ; i < adj.length; i++)
adj[i] = new Vector<Integer>();
add_edge(adj, 0 , 1 );
add_edge(adj, 1 , 2 );
add_edge(adj, 0 , 2 );
add_edge(adj, 0 , 3 );
add_edge(adj, 1 , 3 );
add_edge(adj, 2 , 3 );
if (Indegree(adj, v))
System.out.print( "Yes" );
else
System.out.print( "No" );
}
}
|
Python3
def add_edge(adj, x, y):
adj[x] = adj[x] + [y]
def Indegree(adj, v):
indeg = [ 0 ] * v
for i in range (v):
for j in range ( len (adj[i])):
indeg[adj[i][j]] + = 1
for i in range (v):
if (i = = indeg[i]):
continue
else :
return False
return True
if __name__ = = '__main__' :
v = 4
adj = [[]] * 4
add_edge(adj, 0 , 1 )
add_edge(adj, 1 , 2 )
add_edge(adj, 0 , 2 )
add_edge(adj, 0 , 3 )
add_edge(adj, 1 , 3 )
add_edge(adj, 2 , 3 )
if (Indegree(adj, v)):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
using System.Collections.Generic;
class GFG{
static void add_edge(List< int > []adj,
int x, int y)
{
adj[x].Add(y);
}
static bool Indegree(List< int > []adj,
int v)
{
int []indeg = new int [v];
for ( int i = 0; i < v; i++)
{
for ( int j = 0; j < adj[i].Count; j++)
{
indeg[adj[i][j]]++;
}
}
for ( int i = 0; i < v; i++)
{
if (i == indeg[i])
continue ;
else
return false ;
}
return true ;
}
public static void Main(String[] args)
{
int v = 4;
List< int > []adj = new List< int >[v];
for ( int i = 0; i < adj.Length; i++)
adj[i] = new List< int >();
add_edge(adj, 0, 1);
add_edge(adj, 1, 2);
add_edge(adj, 0, 2);
add_edge(adj, 0, 3);
add_edge(adj, 1, 3);
add_edge(adj, 2, 3);
if (Indegree(adj, v))
Console.Write( "Yes" );
else
Console.Write( "No" );
}
}
|
Javascript
<script>
function add_edge(adj, x, y)
{
adj[x].push(y);
}
function Indegree(adj, v)
{
var indeg = Array(v).fill(0);
for ( var i = 0; i < v; i++) {
for ( var j = 0; j < adj[i].length; j++) {
indeg[adj[i][j]]++;
}
}
for ( var i = 0; i < v; i++) {
if (i == indeg[i])
continue ;
else
return false ;
}
return true ;
}
var v = 4;
var adj = Array.from(Array(v), ()=> new Array());
add_edge(adj, 0, 1);
add_edge(adj, 1, 2);
add_edge(adj, 0, 2);
add_edge(adj, 0, 3);
add_edge(adj, 1, 3);
add_edge(adj, 2, 3);
if (Indegree(adj, v))
document.write( "Yes" );
else
document.write( "No" );
</script>
|
Time Complexity: O(V + E)
Auxiliary Space Complexity: O(V)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...