12,递归,迷宫问题
思路:走迷宫问题时要设置一个策略,如(上,下,左,右),如果改点走不通再回溯
c#实现如下:
using System;
using System.Text.RegularExpressions;
namespace 数据结构
{
//迷宫
public class MiGong
{
static void Main(string[] args)
{
//地图
int[,] map = new int[8, 8];
for (int j = 0; j < 8; j++)
{
map[0, j] = 1;
map[7, j] = 1;
}
for (int i = 1; i < 7; i++)
{
map[i, 0] = 1;
map[i, 7] = 1;
}
//设置挡板
map[2, 1] = 1;
map[2, 2] = 1;
map[2, 3] = 1;
//map[1, 4] = 1;
//打印地图
Console.WriteLine("迷宫地图");
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
Console.Write(map[i,j]);
}
Console.WriteLine();
}
SetWay(map, 1, 1);
//打印地图
Console.WriteLine("");
Console.WriteLine("迷宫走过路径地图");
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
Console.Write(map[i, j]);
}
Console.WriteLine();
}
}
//递归回溯找出路
//map[1,1]入口,开始位置
//map[6,6]出口,结束位置
//约定:1表示墙,2表示走得通,3表示探测过走不通
public static bool SetWay(int[,] map, int i, int j)
{
//已经找到出口
if (map[6, 6] == 2)
{
return true;
}
if (map[i, j] == 0)
{
//假设map[i, j],走得通
map[i, j] = 2;
if (SetWay(map, i + 1, j))//向下找
{
return true;
}
else if (SetWay(map, i, j + 1))//向右找
{
return true;
}
else if (SetWay(map, i - 1, j))//向上向找
{
return true;
}
else if (SetWay(map, i, j - 1))//向左找
{
return true;
}
else
{
//走不通,回溯
map[i, j] = 3;
return false;
}
}
else
{
//1,2,3情况
return false;
}
}
}
}


浙公网安备 33010602011771号