using System.Collections.Generic;
public static void Main()
int[][] edges = new int[5][];
edges[0] = new int[] { 1, 4 };
edges[1] = new int[] { 3 };
edges[2] = new int[] { 4 };
edges[3] = new int[] { 4 };
edges[4] = new int[] { 0 };
for(int vertex = 0; vertex < edges.Length; vertex++)
Console.Write("Reachable from {0}: ", vertex);
PrintReachable(edges, vertex);
private static void PrintReachable(int [][] edges, int vertexFrom)
bool[] printed = new bool[V];
Queue<int> reachableNotPrinted = new Queue<int>(V);
reachableNotPrinted.Enqueue(vertexFrom);
while(reachableNotPrinted.Count > 0)
int vertex = reachableNotPrinted.Dequeue();
Console.Write("{0} ", vertex);
foreach(int vertexTo in edges[vertex])
reachableNotPrinted.Enqueue(vertexTo);