算法思路:广度优先搜索用一个队列去模拟走迷宫过程,最终可得到由起点到终点最短路径的长度。
#include<iostream>
using namespace std;
int a[101][101],book[101][101],head=0,tail=0,n,ex,ey,f=0;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
struct queue{ //定义队列结构体
int x;
int y;
int s;
}q[101];
void BFS(){
while(head<tail){
for(int i=0;i<4;i++){
int newX=q[head].x+dx[i];
int newY=q[head].y+dy[i];
if(newX>=1&&newX<=n&&newY>=1&&newY<=n&&a[newX][newY]==0
&&book[newX][newY]==0){
q[tail].x=newX;
q[tail].y=newY;
q[tail].s=q[head].s+1;
tail++;
book[newX][newY]=1; //标记已访问
if(newX==ex&&newY==ey){ //到达终点
f=1;
break;
}
}
}
if(f==1){
break;
}
head++;
}
}
int main(){
int ox,oy;
cout<<"请输入迷宫边长"<<endl;
cin>>n;
cout<<"请输入迷宫"<<endl;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
cout<<"请输入起点坐标"<<endl;
cin>>ox>>oy;
cout<<"请输入终点坐标"<<endl;
cin>>ex>>ey;
q[head].x=ox;
q[head].y=oy;
q[tail].s=0;
tail++;
book[1][1]=1;
BFS();
cout<<"最短路径长度为"<<q[tail-1].s+1<<endl;
return 0;
}