예제 #1
0
        public List <Node> solve(Maze maze)
        {
            List <Node> path = new List <Node>();

            path.Add(maze.GetStart());

            var current = maze.GetStart().neighbours[2];

            if (current == null)
            {
                return(path);
            }

            var heading = 2; //South

            var turn = 1;    //Turning left, -1 for right

            var startPos = maze.GetStart().Position();
            var endPos   = maze.GetEnd().Position();


            completed = false;

            while (true)
            {
                path.Add(current);

                Point position = current.Position();

                if (position == startPos || position == endPos)
                {
                    if (position == endPos)
                    {
                        completed = true;
                        path.Add(current);
                        break;
                    }
                }

                Node[] n = current.neighbours;
                //

                if (n[Minus(heading)] != null)
                {
                    heading = Minus(heading);
                    current = n[heading];
                }
                else if (n[heading] != null)
                {
                    current = n[heading];
                }
                else if (n[Add(heading)] != null)
                {
                    heading = Add(heading);
                    current = n[heading];
                }
                else if (n[AddTwo(heading)] != null)
                {
                    heading = AddTwo(heading);
                    current = n[heading];
                }

                completed = false;
            }

            return(path);
        }
예제 #2
0
 public Dijkstra(Maze maze)
 {
     this.maze = maze;
 }