迷宫问题递归求解

#include <iostream.h>

#define M 10//数组大小
#define N 10

int endi=7;//结束点
int endj=3;

int v[M][N]={0};//状态位,对应a[i][j]是否被访问过

bool search(int i,int j, int a[M][N])
{
	if(v[i][j]==1)return false;//判断a[i][j]是否被访问,访问则返回,否则将访问为置1.表示其被访问了
	v[i][j]=1;
	
	if(i==endi && j==endj)//判断此点是否到达出口点
	{
		return true;
	}
	if(a[i][j]==1)//此点是否通
	{
		return false;
	}
	if(a[i][j]==0)//此点通时,对其四周进行递归访问。
	{
		if(search(i-1,j,a)){cout<<i-1<<" "<<j<<endl;return true;}
		if(search(i,j-1,a)){cout<<i<<" "<<j-1<<endl;return true;}
		if(search(i,j+1,a)){cout<<i<<" "<<j+1<<endl;return true;}
		if(search(i+1,j,a)){cout<<i+1<<" "<<j<<endl;return true;}
	}
	return false;
}

void main()
{
	
	int a[M][N]={1,1,1,1,1,1,1,1,1,1,
		1,1,1,1,1,1,1,1,1,1,
		1,0,0,0,0,0,1,1,1,1,
		1,1,0,1,1,0,1,1,1,1,
		1,1,0,0,0,0,1,0,0,1,
		1,1,1,1,1,0,0,0,0,1,
		1,1,1,1,1,1,1,1,0,1,
		1,1,1,0,0,0,1,1,0,1,
		1,1,1,1,1,0,0,0,0,1,
		1,1,1,1,1,1,1,1,1,1,
	};

	cout<<search(2,1,a)<<endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值