描述

红色的是墙,不能走,找出从起点走到终点的路
image.png

思路

  1. 先把迷宫做成二维数组 , 如下图

image.png

  1. 设置起点和终点,图上的起点为(1,1),终点为(14,14)
  2. 定义一个约定,0表示没走过的地方,1表示墙,2表示已经走过,能走通的路,3表示走过,但是走不通
  3. 指定一个策略,按照某种规则执行,比如:先往下走,走不通在往右走,走不通在往上走,走不通在往左上,还走不通就是死路了

    代码

    ```csharp using System; using System.Collections.Generic;

namespace ConsoleApp1 { class Program { static void Main(string[] args) { //创建一个二维数组,模拟迷宫 int[,] map = new int[16,16]; //设置墙体,墙为1 for(int i=0;i<16; i++) { map[0, i] = 1; map[15, i] = 1; map[i, 0] = 1; map[i, 15] = 1; if (i < 7) map[6, i] = 1; if (i >= 3 && i < 7) map[i, 3] = 1; if (i >= 6 && i < 14) map[i, 2] = 1; if (i < 5) map[i, 6] = 1; if (i >= 9) map[i, 4] = 1; if (i >= 4 && i < 9) map[10, i] = 1; if (i >= 3 && i < 11) map[i, 8] = 1; if (i < 4) map[i, 11] = 1; if (i >= 8 && i < 13) map[5, i] = 1; if (i >= 7 && i < 14) map[i, 11] = 1; if (i >= 6) map[13, i] = 1; } for(int j = 0; j < map.GetLength(0); j++) { for (int t = 0; t < map.GetLength(1); t++) { Console.Write(map[j,t]+” “); } Console.WriteLine(); } FindWay(map, 1, 1); Console.WriteLine(“找完路后”); for (int j = 0; j < map.GetLength(0); j++) { for (int t = 0; t < map.GetLength(1); t++) { Console.Write(map[j, t] + “ “); } Console.WriteLine(); } } ///

/// 迷宫寻路 /// 从地图 1,1出发,如果到了15,15说明 通路找到 /// 约定:当map[i,j]=0,表示该点没有走过,当为1是墙,当为2为通路,为3表示该点已经走过,但是不通 /// 在走迷宫时需要确定一个策略,下->右->上->左,如果改点走不通,在回溯 /// /// 迷宫地图 /// 行坐标 [0, 8] 1 int

  1. /// <param name="j">列坐标</param>
  2. /// <returns>找到通路返回true,否则返回false</returns>
  3. static bool FindWay(int[,] map, int i, int j)
  4. {
  5. if (map[14, 14] == 2)//通路已经找到
  6. return true;
  7. else
  8. {
  9. if (map[i, j] == 0)//表示当前这个点还没有走过
  10. {
  11. //先假设这个点可以走通,设置为2
  12. map[i,j] = 2;
  13. //按照策略走,下->右->上->左
  14. if (FindWay(map, i + 1, j))//向下走
  15. return true;
  16. else if (FindWay(map, i, j + 1))//向右走
  17. return true;
  18. else if (FindWay(map, i - 1, j))//向上走
  19. return true;
  20. else if (FindWay(map, i, j - 1))//向左走
  21. return true;
  22. else//如果i,j这个点,四个方向都走不通,不就是死路吗
  23. {
  24. map[i, j] = 3;
  25. return false;
  26. }
  27. }
  28. else//如果map[i,j]!=0,可能是1,2,3
  29. {
  30. //1是墙走不了,2是已经走路过的路也不用走了,3是死路也不走,都不走就返回false
  31. return false;
  32. }
  33. }
  34. }
  35. }

}

``` image.png