迷宫算法

本文探讨了迷宫算法的核心思想,通过二维数组表示迷宫地图,用1表示通路,0表示障碍,2表示已走过,3表示死路。介绍了结构体表示当前位置,并详细说明了文件读取迷宫地图的过程。接着,文章对比了递归和非递归两种解法,递归版本利用回溯解决死路问题,非递归版本则借助栈保存步骤。
摘要由CSDN通过智能技术生成

迷宫算法的核心思想是对自己当前的位置的前后左右进行判断,判断是否为通路,如果是通路就可以朝对应的方向走,而走到下一步也是进行相同的判断,但对于前后左右均不通的话,那就得往回走(这里我们将走过的路进行标记,防止在判断的时候与未走过的混淆影响判断)

对于迷宫地图,我们可以给出一个二维数组,当中的每一个元素代表二维数组中的每一个位置,1----通路,0---障碍物,2----已走过的路,3----已走过并判断出是死路的路径

首先,我们得给出表示当前位置的方法,构建一个结构体:

struct Pos
{
	Pos(int Row,int Col)//Row---行,Col---列
		:_Row(Row)
		,_Col(Col)
	{}

	int _Row;
	int _Col;
};
对于迷宫地图,我们可以给出一个文件来专门保存,而因此我们也需要通过文件操作来读取迷宫地图的相关信息:当前关卡,当前地图的行列数,当前地图的入口

所以我们要进行如下读取文件操作:

int ReadLevel(FILE*& fp)          //读取当前关卡
{

	char str;
	size_t num=0;
	while((str=fgetc(fp))!='L');

	while((str=fgetc(fp))!='\n')
	{
		num=(str-'0')+num*10;
	}

	cout<<"the "<<num<<endl;


	return num;
}

int ReadRow(FILE*& fp)           //读取当前地图的行数
{

	char str;
	while((str=fgetc(fp)!='R'));

	int num=0;
	while((str=fgetc(fp))!='\n')
	{
		num=(str-'0')+num*10;
	}
	return num;

}

int ReadCol(FILE*& fp)             //读取当前地图的列数
{

	char str;
	while((str=fgetc(fp)!='C'));

	int num=0;
	while((str=fgetc(fp))!='\n')
	{
		nu
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值