rt rt
代码:
#include<bits/stdc++.h>
using namespace std;
int xx[]={0,0,-1,1};
int yy[]={1,-1,0,0};
int n,m;
int mp[15][15];
int sx,sy;
int ex,ey;
struct Node{
int x;
int y;
int e;
int s;
};
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>mp[i][j];
if(mp[i][j]==2){
sx=i;
sy=j;
}
if(mp[i][j]==3) {
ex=i;
ey=j;
}
}
}
queue<Node> Q;
Q.push((Node){sx,sy,6,0});
while(!Q.empty()){
if(Q.front().x==ex and Q.front().y==ey){
cout<<Q.front().s<<endl;
return 0;
}
for(int i=0;i<4;++i){
int dx=Q.front().x+xx[i];
int dy=Q.front().y+yy[i];
if(dx>0 and dx<=n and dy>0 and dy<=m and mp[dx][dy]!=0){
Q.push((Node){dx,dy,Q.front().e-1,Q.front().s+1});
if(Q.front().e==0) {
Q.pop();
}
if(mp[dx][dy]==4) Q.front().e=6;
}
}
Q.pop();
}
puts("-1");
return 0;
}
第一个数据点:
9 9 2 0 1 4 1 1 4 1 1 1 0 4 1 1 4 1 1 1 1 4 1 1 4 1 1 1 4 4 1 1 4 1 4 1 4 1 1 1 4 1 1 1 4 1 1 1 4 1 1 1 4 1 1 1 4 1 4 1 4 1 1 1 1 1 1 1 4 1 1 1 1 1 1 1 4 1 1 1 1 1 3
-1