#include<iostream>
#include<iomanip>
#define k 4 //试探方向个数
#define m 6 //迷宫的实际行
#define n 8 //迷宫的实际列
using namespace std;
//试探方向
typedef struct{
int x,y;
}item;
int main(){
int path(int maze[m+2][n+2],item move[],int x,int y,int step); /*迷宫算法*/
/*与点(x,y)相邻的四个点的坐标*/
int movee[][2]={{0,1},{1,0},{0,-1},{-1,0}};
//存入move中
item move[k];
for(int t=0;t<k;t++){
move[t].x=movee[t][0];
move[t].y=movee[t][1];
}
//迷宫
int maze[m+2][n+2]={
{1,1,1,1,1,1,1,1,1,1},
{1,0,1,1,1,0,1,1,1,1},
{1,0,0,0,0,1,1,1,1,1},
{1,0,1,0,0,0,0,0,1,1},
{1,0,1,1,1,0,0,1,1,1},
{1,1,0,0,1,1,0,0,0,1},
{1,0,1,1,0,0,1,1,0,1},
{1,1,1,1,1,1,1,1,1,1}
};
cout<<"迷宫为:\n";
for(int i=0;i<m+2;i++){
for(int j=0;j<n+2;j++){
cout<<maze[i][j]<<" ";
}
cout<<endl;
}
cout<<"迷宫路径为:\n";
int step=1;
if(path(maze,move,1,1,step)){
for(int i=0;i<m+2;i++){
for(int j=0;j<n+2;j++){
//左对齐,占五位
cout<<setiosflags(std::ios::left)<<setw(5)<<maze[i][j];
}
cout<<endl;
}
}
return 0;
}
/*迷宫算法*/
int path(int maze[m+2][n+2],item move[],int x,int y,int step){
int i,j;
step++;
maze[x][y]=step;
if(x==m && y==n){//找到路径,结束
return 1;
}
for(int t=0;t<k;t++){
i=x+move[t].x;
j=y+move[t].y;
if(maze[i][j] == 0){
if(path(maze,move,i,j,step)){
return 1;//下一个是出口,则返回
}
}
}
step--;
maze[x][y]=0;
return 0;
}
迷宫问题(递归)
最新推荐文章于 2022-06-29 10:50:01 发布