(原题链接)
注:数据很小
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,st;
};
int mx[10]={1,-1,0,0};
int my[10]={0,0,1,-1};
int g[105][105];
queue<node>q;
int check(int xx,int yy){
if(g[xx][yy]==1) return 1;
for(int i=0;i<=3;i++){
int fx=xx+mx[i];
int fy=yy+my[i];
if(g[fx][fy]==2) return 0;
}
return 1;
}
int main(){
int n,xs,ys,xe,ye;
cin>>n>>xs>>ys>>xe>>ye;
node s;
s.x=xs;
s.y=ys;
s.st=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>g[i][j];
}
}
q.push(s);
while(!q.empty()){
node now=q.front();
q.pop();
if(now.x==xe&&now.y==ye){
cout<<now.st;
return 0;
}
for(int i=0;i<4;i++){
int nx=now.x+mx[i];
int ny=now.y+my[i];
if(nx>0&&nx<=n&&ny>0&&ny<=n&&check(nx,ny)){
q.push(node{nx,ny,now.st+1});
}
}
}
cout<<-1;
return 0;
}