Beispiel #1
0
        public List <Node> Run(List <List <Node> > grid, Node startNode, Node finishNode)
        {
            startNode.Distance = 0;
            List <Node> visitedNodesInOrder = new List <Node>();

            ClosedSet.Add(startNode);
            startNode.IsVisited = true;
            UpdateUnvisitedNeighbors(startNode, finishNode, grid);

            while (true)
            {
                Node bestNode;

                try
                {
                    bestNode = OpenSet.Dequeue();
                }
                catch (Exception e)
                {
                    return(visitedNodesInOrder); // Set is empty
                }

                bestNode.IsVisited = true;
                if (bestNode.IsWall)
                {
                    continue;
                }
                visitedNodesInOrder.Add(bestNode);
                if (bestNode.IsFinish == true || bestNode.IsBomb == true)
                {
                    return(visitedNodesInOrder);
                }
                UpdateUnvisitedNeighbors(bestNode, finishNode, grid);
            }
        }