#include
#define max1 100
using namespace std;
int flag[max1][max1];//标记该位置是否走过;
int jihao;//记录迷宫的通路个数;
typedef struct
{
int data[max1][max1];
int m,n;
}map1;//迷宫的邻接矩阵的结构体;
typedef struct
{
int x[max1];
int y[max1];
}sign;//记录迷宫经过的点的位置的结构体;
void createmaze(map1 *&l)
{
cout<<" 迷宫问题"<<endl;
cout<<“请输入迷宫大小,行数m,列数n”<<endl;
cout<<“行数m:”;
cin>>l->m;
cout<<“列数n:”;
cin>>l->n;//输入迷宫大小;
cout<<“请输入该迷宫“0”为通路,“1”为障碍物”<<endl;
for(int i=1;i<=l->m;i++)
for(int j=1;j<=l->n;j++)
{
cin>>l->data[i][j];
}//输入迷宫的通路和障碍;
}//通过邻接矩阵创建迷宫;
void disprode(sign *&s,int n)
{
if(jihao1)
cout<<“该迷宫的走法有:”<<endl;
cout<<“第”<<jihao<<“条路径:”;
for(int i=0;i<=n;i++)
{
if(in)
cout<<"("<x[i]<<","<y[i]<<")"<<endl;
else
cout<<"("<x[i]<<","<y[i]<<")"<<“到”;
}
}//输出迷宫通路的函数;
void findrode(map1 *&l,sign *&s,int num,int a,int b)
{
s->x[num]=a;//标记该点的横坐标;
s->y[num]=b;//标记该点的纵坐标;
if(al->m&&bl->n&&l->data[l->m][l->n]==0)
{
jihao++;//增加路径条数;
disprode(s,num);//调用输出函数输出这一条路径;
return ;
}//判断是否到终点;
if(b+1<=l->n&&l->data[a][b+1]==0&&flag[a][b+1]==0)
{
flag[a][b+1]=1;
findrode(l,s,num+1,a,b+1);
flag[a][b+1]=0;//当递归回溯时重置该位置;
}//判断是否可以向右走;
if(b-1>0&&l->data[a][b-1]==0&&flag[a][b-1]==0)
{
flag[a][b-1]=1;
findrode(l,s,num+1,a,b-1);
flag[a][b-1]=0;//当递归回溯时重置该位置;
}//判断是否可以向左走;
if(a+1<=l->m&&l->data[a+1][b]==0&&flag[a+1][b]==0)
{
flag[a+1][b]=1;
findrode(l,s,num+1,a+1,b);
flag[a+1][b]=0;//当递归回溯时重置该位置;
}//判断是否可以向上走;
if(a-1>0&&l->data[a-1][b]==0&&flag[a-1][b]0)
{
flag[a-1][b]=1;
findrode(l,s,num+1,a-1,b);
flag[a-1][b]=0;//当递归回溯时重置该位置;
}//判断是否可以向下走;
}
int main()
{
map1 *l;
sign *s;
l=new map1;
s=new sign;
createmaze(l);
flag[1][1]=1;
cout<<“起点:”<<"(1,1) “<<“终点:”<<”("<m<<","<n<<")"<<endl;
findrode(l,s,0,1,1);//从(1,1)出发且num=0开始;
if(jihao0)
cout<<“该迷宫没有出路!”;
return 0;
}