迷宫
#include<iostream.h>const int m=4,n=4;
int maze[m+2][n+2];//定义迷宫数组
int mark[m+2][n+2];//定义保存访问标记的数组
int move[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//0,1,2,3代表东,西,南,北
int SeekPath(int x,int y)
{
int i; //代表从当前位置移到下一位置的方向
int g,h; //下一位置坐标
if((x==m)&&(y==m))return 1;//到达出口点返回ture结束递归
for(i=0;i<4;i++)
{
g=x+move[i][0];h=y+move[i][1];//求下一位置坐标
if((maze[g][h]==0)&&(mark[g][h]==0))//若下一位置未被访问,则从该位置开始寻找
{
mark[g][h]=1; //已访问结点做好标记
if(SeekPath(g,h)){
cout<<"("<<g<<","<<h<<"),";
return 1;
}
}
}
cout<<"此迷宫无路径"<<endl<<endl;
return 0;//无路径,返回false
}
void main()
{
int i,j;int q;
while(q!=0)
{
cout<<"请输入6行,6列迷宫数据(0表示通路1表示不通!迷宫四周的值全为1!):"<<endl;
for(i=0;i<m+2;i++)
for(j=0;j<n+2;j++)
cin>>maze[i][j];
for(i=0;i<m+2;i++) //初始化mark数组
for(j=0;j<n+2;j++)
mark[i][j]=0;
mark[1][1]=1; //置入口标记为1
if(SeekPath(1,1)) //递归求路径
cout<<"("<<1<<","<<1<<")"<<endl<<endl;
cout<<"输入另一迷宫按1 结束程序按0"<<endl;
cin>>q;
}
}