// C# implementation of modified BFS for adjacency matrix
// representation
using System;
using System.Collections.Generic;
class Gfg {
static void AddEdge(int[, ] edges, int f, int s)
{
edges[f, s] = 1;
}
static void PrintBFS(int[, ] edges, int V, int start,
int[] visited)
{
if (V == 0)
return;
Queue<int> BFS = new Queue<int>();
BFS.Enqueue(start);
visited[start] = 1;
while (BFS.Count > 0) {
int data = BFS.Dequeue();
Console.Write(data + " ");
for (int i = 0; i < V; i++) {
if (edges[data, i] == 1) {
if (visited[i] == 0) {
BFS.Enqueue(i);
visited[i] = 1;
}
}
}
}
}
static void BFSHelper(int[, ] edges, int V)
{
if (V == 0)
return;
int[] visited = new int[V];
for (int i = 0; i < V; i++) {
visited[i] = 0;
}
for (int i = 0; i < V; i++) {
if (visited[i] == 0) {
PrintBFS(edges, V, i, visited);
}
}
Console.WriteLine();
}
static void Main(string[] args)
{
int V = 5;
int E = 6;
if (E == 0) {
for (int i = 0; i < V; i++) {
Console.Write(i + " ");
}
Console.WriteLine();
Environment.Exit(0);
}
int[, ] edges = new int[V, V];
for (int i = 0; i < V; i++) {
for (int j = 0; j < V; j++) {
edges[i, j] = 0;
}
}
AddEdge(edges, 0, 4);
AddEdge(edges, 1, 2);
AddEdge(edges, 1, 3);
AddEdge(edges, 1, 4);
AddEdge(edges, 2, 3);
AddEdge(edges, 3, 4);
BFSHelper(edges, V);
}
}
// This code is contributed by cavi4762.