RT,本人代码如下:
#include <bits/stdc++.h>
using namespace std;
struct points{
int x;
int y;
int times;
};
queue<points> q;
char mapp[1005][1005]={};
bool flag[1005][1005]={};
int x1,y3,x2,y2,n;
int main(){
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>mapp[i][j];
if(mapp[i][j]=='1')flag[i][j]=false;
else flag[i][j]=true;
}
}
cin>>x1>>y3>>x2>>y2;
q.push({x1,y3,1});
flag[x1][y3]=false;
while(!q.empty()){
points work=q.front();
if(work.x==x2&&work.y==y2)cout<<work.times;break;
if(work.x>0&&flag[work.x-1][work.y]){
q.push({work.x-1,work.y,work.times+1});
flag[work.x-1][work.y]=false;
}
if(work.x<n-1&&flag[work.x+1][work.y]){
q.push({work.x+1,work.y,work.times+1});
flag[work.x+1][work.y]=false;
}
if(work.y>0&&flag[work.x][work.y-1]){
q.push({work.x,work.y-1,work.times+1});
flag[work.x][work.y-1]=false;
}
if(work.y<n-1&&flag[work.x][work.y+1]){
q.push({work.x,work.y+1,work.times+1});
flag[work.x][work.y+1]=false;
}
// cout<<"test\n";
q.pop();
}
// cout<<q.front().times;
return 0;
}
根本进不了while循环,求解。
可能有点不好读
附:本人尝试过,队列q中有值。