Beispiel #1
0
    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);
    }