using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
Console.WriteLine(g.IsCyclic());
public List<Node> adjacents;
adjacents = new List<Node>();
private List<Node> Nodes;
Nodes = new List<Node>();
public void AddEdge(int source,int destination)
AddEdge(source,destination,0);
public void AddEdge(int source,int destination,int weight)
var sourceNode = GetNode(source);
var destinationNode = GetNode(destination);
if ( sourceNode == null )
sourceNode = new Node(source);
if ( destinationNode == null )
destinationNode = new Node(destination);
sourceNode.adjacents.Add(destinationNode);
Nodes.Add(destinationNode);
public void PrintAdjacentNodes(int parent)
var parentNode = GetNode(parent);
foreach(var item in parentNode.adjacents)
Console.WriteLine(item.data);
private Node GetNode(int vertex)
foreach(var item in Nodes)
List<int> white = new List<int>();
List<int> grey = new List<int>();
List<int> black = new List<int>();
foreach(var item in Nodes)
if ( HasCycle(white,grey,black,item))
private bool HasCycle(List<int> white,List<int> grey,List<int> black,Node vertex )
MoveVertex(white,grey,vertex.data);
foreach(var node in vertex.adjacents)
if ( black.Contains(node.data))
if ( grey.Contains(node.data))
if ( HasCycle(white,grey,black,node))
MoveVertex(grey,black,vertex.data);
private void MoveVertex(List<int> source,List<int> destination,int data)