ConstantIce @ 2022-05-12 18:50:21
RT 样例过了但是全WA
起始坐标我设成了s1,e1 终点是s2,e2
#include<bits/stdc++.h>
using namespace std;
int n;
int s1,s2,e1,e2;
char a[1001][1001];
bool b[1001][1001];
int dx[5]={0,1,0,0,-1};
int dy[5]={0,0,1,-1,0};
queue< pair<int,int> > q;
int bfs(int k){
for(int i=1;i<=q.size();i++){
int sx=q.front().first,sy=q.front().second;
q.pop();
for(int j=1;j<=4;j++){
int ex=sx+dx[j],ey=sy+dy[j];
if(ex==s2&&ey==e2) return k;
if(ex>=1&&ex<=n&&ey>=1&&ey<=n&&b[ex][ey]==0&&a[ex][ey]=='0'){
b[ex][ey]=1;
q.push(make_pair(ex,ey));
}
}
}
bfs(k+1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
cin>>s1>>e1>>s2>>e2;
b[s1][e1]=1;
q.push(make_pair(s1,e1));
cout<<bfs(1);
return 0;
}
希望有DALAO帮助QAQ
by ConstantIce @ 2022-05-12 18:51:27
希望不会又是手抖哪个变量打错了))
by Dream_weavers @ 2022-05-12 19:10:21
for(int i=1;i<=q.size();i++)
这种写法我还是头一次见,bfs不是这样写的,建议去看看题解
by ConstantIce @ 2022-05-12 19:11:07
@Dream_weavers 好的谢谢!
by ConstantIce @ 2022-05-12 19:21:20
@Dream_weavers 谢谢 改成while循环之后过了...可是为什么呢是因为在q.pop()
和q.push()
的时候q.size()
也改变了吗还是其他原因
by Dream_weavers @ 2022-05-12 19:24:38
@Tray_Z 肯定会变啊,STL容器的大小是不固定的,建议百度queue的用法