private static void BreadthFirst(int[][] graph, int n)
{
Queue<int> nodes = new Queue<int>();
nodes.Enqueue(0);
bool[] visitedNodes = new bool[n];
bool firstNode = true;
while (nodes.Count != 0)
{
int currentNode = nodes.Dequeue();
if (!firstNode)
Console.Write(", ");
Console.Write(currentNode);
visitedNodes[currentNode] = true;
for (int i = 0; i < n; i++)
{
int edge = graph[currentNode][i];
int reverseEdge = graph[i][currentNode];
//check there is an edge between them
if (edge != HAS_EDGE && reverseEdge != HAS_EDGE)
continue;
//check if its visited
if (visitedNodes[i])
continue;
//check if its in queue
if (!nodes.Contains(i))
{
nodes.Enqueue(i);
}
}
firstNode = false;
}
}