Esempio n. 1
0
    override public bool FindPath(Node startNode, Node goalNode, PathFinding_Heuristics heursiticFunction, ref Dictionary <Node, Node_Data> nodeData, int maxGridSize)
    {
        BinaryHeap <Node_Data> openSet = new BinaryHeap <Node_Data>(maxGridSize);

        nodeData[startNode] = new Node_Data(startNode);
        openSet.Add(nodeData[startNode]);

        Node curNode;

        do
        {
            curNode = openSet.RemoveFirst().node;

            nodeData[curNode].inClosedSet = true;
            nodeData[curNode].inOpenSet   = false;

            foreach (Node node in curNode.adjacentNodes)
            {
                if (!nodeData.ContainsKey(node))
                {
                    nodeData[node] = new Node_Data(node);
                }

                if (!nodeData[node].inClosedSet)
                {
                    nodeData[node].parentNode = curNode;

                    if (!nodeData[node].inOpenSet)
                    {
                        nodeData[node].inOpenSet = true;
                        nodeData[node].hCost     = heursiticFunction.GetHCost(node, goalNode);

                        openSet.Add(nodeData[node]);
                    }
                }
            }

            if (openSet.Count == 0)
            {
                break;
            }
        } while (curNode != goalNode);

        return((curNode == goalNode) ? true : false);
    }
Esempio n. 2
0
    override public bool FindPath(Node startNode, Node goalNode, PathFinding_Heuristics heursiticFunction, ref Dictionary <Node, Node_Data> nodeData, int maxGridSize)
    {
        bool pathFound = false;

        Queue nodeQueue = new Queue();

        nodeQueue.Enqueue(startNode);

        while (nodeQueue.Count > 0)
        {
            Node curNode = (Node)nodeQueue.Dequeue();

            if (curNode == goalNode)
            {
                pathFound = true;
                break;
            }

            foreach (Node node in curNode.adjacentNodes)
            {
                if (!nodeData.ContainsKey(node))
                {
                    nodeData[node] = new Node_Data(node);
                }

                Node parent = nodeData[node].parentNode;

                if (parent == null && node != startNode)
                {
                    nodeData[node].parentNode = curNode;
                    nodeQueue.Enqueue(node);
                }
            }
        }

        return(pathFound);
    }