P1746 求助

P1746 离开中山路

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的用法


|