迷宫(Maze) 迷宫算法示例: bool isReached = false; int ox = 0, oy = 0;//起点 /// <summary> /// 迷宫 /// </summary> /// <param name="maze"></param> /// <param name="x">X起点</param> /// <param name="y">Y起点</param> void Maze(int[,] maze,int x,int y) { //0 未走过的点 //1 障碍 //2 走过的点 //3 走过但不通的点 if (maze[x, y] == 0)//未走过的点 { int yNum = maze.GetLength(1); //得到二维护数组的中每一维的长度,如:int[3,4]中每一维的长度为4。也就是y的值。 int xNum = maze.Length / yNum; maze[x, y] = 2; //走过的点, //刷新 WriteMaze(maze); if (x == xNum - 1 && y == yNum - 1)//到达终点 { isReached = true; Console.WriteLine("/nReach"); return; } int i = 0; //0,1,2,3表示右下上左四个方向 while (i < 4 && !isReached) { switch (i) { case 0: if (y + 1 >= 0 && y + 1 < yNum) { if (maze[x, y + 1] == 0) { Maze(maze, x, y + 1); } else if (x == xNum - 1 && y + 1 == yNum - 1) { Console.WriteLine("/nNo way"); } } break; case 1: if (x + 1 >= 0 && x + 1 < xNum) { if (maze[x + 1, y] != 1 && maze[x + 1, y] != 3) { Maze(maze, x + 1, y); } else if (x + 1 == xNum - 1 && y == yNum - 1) { Console.WriteLine("/nNo way"); } else if (y == yNum - 1) { maze[x, y] = 3; //刷新 WriteMaze(maze); return; } } break; case 2: if (x - 1 >= 0 && x - 1 < xNum) { if (maze[x - 1, y] == 0) { Maze(maze, x - 1, y); } } break; case 3: if (y - 1 >= 0 && y - 1 < yNum) { if (maze[x, y - 1] == 0) { Maze(maze, x, y - 1); if (maze[x, y - 1] == 3) //向左边的路不通并且返回时,表示当前点无路 { maze[x, y] = 3; //刷新 WriteMaze(maze); } } else { maze[x, y] = 3;//此点不通 //刷新 WriteMaze(maze); } } else { maze[x, y] = 3;//此点不通 //刷新 WriteMaze(maze); } break; } i++; } if (i == 4 && x == ox && y == oy) { maze[x, y] = 3; //刷新 WriteMaze(maze); Console.WriteLine("/nNo way"); return; } } else if (maze[x, y] == 1 || maze[x, y] == 3) { WriteMaze(maze);//刷新 Console.WriteLine("/nNo way"); } } void WriteMaze(int[,] maze) { int len = maze.GetLength(1); Console.Clear(); for (int i = 0; i < maze.Length; i++) { if (i > 0) { if (i % len == 0) { Console.WriteLine(); } else { Console.Write('/t'); } } Console.Write(maze[i / len, i % len]); } }