int BreadthFirstSearch(Node start, Node target) { if (start == null || target == null) { return(0); } if (start.connectedEdges.Count == 0) { return(0); } Queue <Node> myQueue = new Queue <Node> (); myQueue.Enqueue(start); start.hasBeenVisited = true; start.parentNode = null; while (myQueue.Count != 0) { Node top = myQueue.Peek(); myQueue.Dequeue(); if (top.label == target.label) { Debug.Log("found Target" + top.label); return(graph.CalcPathLength(target, 0)); } foreach (var node in top.GetConnectedNodes()) { if (node.hasBeenVisited == false) { node.parentNode = top; myQueue.Enqueue(node); node.hasBeenVisited = true; // Early exit if direct child is target if (node.label == target.label) { return(graph.CalcPathLength(target, 0)); } } } } return(0); }