标题 我们要解救小哈,并得到最短的步数,输入m行n列由0和1构成的迷宫,1为怪兽该区域不能走。写出代码得到最短的步数。
输入
输入m,n。输入由0和1组成的m*n大小的迷宫,输入起点x1,y1。终点x2,y2。
输出
一个常数,y。
代码
#include<bits/stdc++.h>
using namespace std;
int a[51][51]={0},b[51][51]={0};
struct note
{
int x;
int y;
int f;
int step;
};
typedef struct note que;
int n,m;
int main(void)
{
que book[2510];
int i,j,h,y,x1,x2,y1,y2,steam=0,tail=0,l=0;
int next[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cin>>a[i][j];
}
cin>>x1>>y1>>x2>>y2;
book[tail].x=x1;
book[tail].y=y1;
book[tail].f=0;
book[tail].step=0;
b[x1][y1]=1;
tail++;
while(steam<tail)
{
for(i=0;i<4;i++)
{
h=book[steam].x+next[i][0];
y=book[steam].y+next[i][1];
if(h>0&&h<=n&&y>0&&y<m)
{
if(a[h][y]==0&&b[h][y]==0)
{
b[h][y]=1;
book[tail].x=h;
book[tail].y=y;
book[tail].step=book[steam].step+1;
tail++;
}
}
if(h==x2&&y==y2)
l=1;
}
if(l==1)
break;
steam++;
}
cout<<book[tail-1].step <<endl;
return 0;
}