题目描述:
有一个m行n列的迷宫,|表示不通,*表示通行,每一步可以沿上下左右四个方向,
还有四个整数a,b,c,d,要求从a行b列走到c行d列的最少步数。
样例输入:
3 4 1 1 2 4 **** *||* ****
样例输出:
4
#include<bits/stdc++.h>
using namespace std;
int m,n,x,y,c,d;
char a[101][101];
char b[101][101];
int w[5]={0,1,0,-1,0},v[5]={0,0,1,0,-1};
struct data{
int num,x,y;
};
queue<data>q;
int main(){
cin>>m>>n>>x>>y>>c>>d;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
q.push(data{0,x,y});
b[x][y]=1;
while(!q.empty()){
int x1=q.front().x,y1=q.front().y,num=q.front().num;
q.pop();
if(x1==c&&y1==d){
cout<<num;
return 0;
}
for(int i=1;i<=4;i++){
int x0=x1+w[i],y0=y1+v[i];
if(x>=0&&0<=m&&y0>=1&&y0<=n&&a[x0][y0]=='*'&&b[x0][y0]==0){
q.push(data{num+1,x0,y0});
b[x0][y0]=1;
}
}
}
}