1.条件:会c++,至少看得懂struct和queue
差不多这样
//这是一个迷宫问题,取 M * N 个方格,1表示障碍,0表示道路\
//输入起点和终点坐标,输出最小步数
#include<bits/stdc++.h>
using namespace std;
#define maxn 10 //设定方格尺寸上限
struct node{
int x,y,s;//坐标和步数
node(int a,int b,int c){//方便压入队列
x=a;y=b;s=c;
}
};
int main(){
cout<<"这是一个迷宫问题,取 M * N 个方格,1表示障碍,0表示道路\n输入起点和终点坐标,输出最小步数\n";
int t=0;
int M,N;//方格尺寸
int m1,n1,m2,n2;//起点和终点坐标
int a[maxn][maxn]={0};//方格内容 (从(1,1)到(M,N)) ,1表示障碍,0表示道路
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};//朝四个方向拓展
queue<node>q;//队列
cout<<"请输入方格尺寸(M*N)";
cin>>M>>N;//输入方格尺寸
cout<<"请输入方格内容(1 or 0)";
for(int i=1;i<=M;i++)
for(int j=1;j<=N;j++)
cin>>a[i][j];//输入方格内容
cout<<"请输入起点和终点坐标";
cin>>m1>>n1>>m2>>n2;//输入起点和终点坐标
if(a[m1][n1]||a[m2][n2]){//判断起点和终点是否为障碍点
cout<<"无法到达终点";
return 0;
}
q.push(node(m1,n1,0)); //将起点坐标和步数压入队列
a[m1][n1]=1;//把起点标记为障碍
while(!q.empty()){
node l=q.front();
if(l.x==m2&&l.y==n2){
cout<<"最小步数为"<<l.s;
t=1;//走到终点的标志
break;
}
q.pop();
for(int i=0;i<4;i++){
int xx=l.x+dir[i][0],yy=l.y+dir[i][1],ss=l.s+1;
if(xx>0&&xx<=M&&yy>0&&yy<=N&&!a[xx][yy]){//坐标位于方格内且该点不是障碍
q.push(node(xx,yy,ss));//将符合条件的点压入队列
a[xx][yy]=1;//将符合条件的点标记防止再走一遍
}
}
}
if(!t) cout<<"无法到达终点";//遍历整个方格后没有找到终点
return 0;
}