描述
思路
- 先把迷宫做成二维数组 , 如下图
- 设置起点和终点,图上的起点为(1,1),终点为(14,14)
- 定义一个约定,0表示没走过的地方,1表示墙,2表示已经走过,能走通的路,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(); } } ///
/// <param name="j">列坐标</param>
/// <returns>找到通路返回true,否则返回false</returns>
static bool FindWay(int[,] map, int i, int j)
{
if (map[14, 14] == 2)//通路已经找到
return true;
else
{
if (map[i, j] == 0)//表示当前这个点还没有走过
{
//先假设这个点可以走通,设置为2
map[i,j] = 2;
//按照策略走,下->右->上->左
if (FindWay(map, i + 1, j))//向下走
return true;
else if (FindWay(map, i, j + 1))//向右走
return true;
else if (FindWay(map, i - 1, j))//向上走
return true;
else if (FindWay(map, i, j - 1))//向左走
return true;
else//如果i,j这个点,四个方向都走不通,不就是死路吗
{
map[i, j] = 3;
return false;
}
}
else//如果map[i,j]!=0,可能是1,2,3
{
//1是墙走不了,2是已经走路过的路也不用走了,3是死路也不走,都不走就返回false
return false;
}
}
}
}
}
```