#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;
}
迷宫问题递归求解
最新推荐文章于 2022-11-02 11:10:08 发布