public override void SolveMaze(Maze maze) { base.SolveMaze(maze); Datastructures.Queue <int> q = new Datastructures.Queue <int>(); q.Enqueue(maze.start); while (!q.isEmpty) { current = q.Dequeue(); if (current < 0) { continue; } if (!Global.noDelay) { while (!Global.doStep) { } } Global.doStep = false; iterations++; if (current == maze.end) { maze.solved = true; solving = false; return; } List <int> neighbours = maze.maze.GetAllNeighbours(current); foreach (int next in neighbours) { if (maze.solved) { return; } if (!maze.IsEdge(current, next)) { if (Length(current) < Length(next) || solution[next] == -1) { solution[next] = current; q.Enqueue(next); } } } } solving = false; }
public override void SolveMaze(Maze maze) { Datastructures.Queue <int> q = new Datastructures.Queue <int>(); for (current = 0; current < maze.maze.size; current++) { if (!Global.noDelay) { while (!Global.doStep) { } } Global.doStep = false; if (current == maze.start || current == maze.end) { continue; } iterations++; List <int> neighbours = maze.maze.GetAllNeighbours(current); int count = 0; foreach (int neighbour in neighbours) { if (!maze.IsEdge(current, neighbour) && !deadEnds.Contains(current)) { count++; } } if (count == 1) { deadEnds.Add(current); q.Enqueue(current); } } while (!q.isEmpty) { if (!Global.noDelay) { while (!Global.doStep) { } } Global.doStep = false; current = q.Dequeue(); if (current == maze.start || current == maze.end) { continue; } iterations++; List <int> neighbours = maze.maze.GetAllNeighbours(current); int next = -1; foreach (int neighbour in neighbours) { if (neighbour == maze.end) { continue; } if (!maze.IsEdge(current, neighbour) && !deadEnds.Contains(neighbour)) { List <int> neighbourNeighbours = maze.maze.GetAllNeighbours(neighbour); int count = 0; foreach (int i in neighbourNeighbours) { if (!maze.IsEdge(neighbour, i) && !deadEnds.Contains(i)) { count++; } } if (count == 1) { if (next == -1) { next = neighbour; } else { continue; } } } } if (next == -1) { continue; } deadEnds.Add(next); q.Enqueue(next); } }