求助大神,为什么所有点都是mle,全部都是

P1332 血色先锋队

求求我,求求我
by lllllluogu @ 2024-01-03 18:55:34


@[lllllluogu](/user/709586) 我的原因是队列爆掉了吗
by lllllluogu @ 2024-01-03 19:09:40


@[lllllluogu](/user/709586) 很有可能是队列搞炸的 检查一下有没有无限循环的情况,例如反复搜索,没有排除祖先?
by Shen_Linwood @ 2024-01-03 19:16:33


你应该在把点 `push` 进队列的时候就修改 `vis` 数组,而不是在即将 `pop` 的时候修改
by AC_love @ 2024-01-03 19:25:55


@[AC_love](/user/186472) 真的谢谢你。 我已经解决了,好开心!!! ```c #include <bits/stdc++.h> using namespace std; int a,b,n,m; int vis[550][550]; struct node{int x;int y;}; int dx[]={1,0,-1,0},dy[]={0,1,0,-1}; int main(){ cin>>n>>m>>a>>b; int x,y,t=0; memset(vis,-1,sizeof(vis)); queue<node>q; for(int i=1;i<=a;i++){ scanf("%d%d",&x,&y); q.push(node{x,y}); vis[x][y]=t; } while(!q.empty()){ int sz=q.size();t++; while(sz--){ node cur=q.front();q.pop(); for(int i=0;i<4;i++){ int tx=cur.x+dx[i],ty=cur.y+dy[i]; if(tx<1||ty<1||tx>n||ty>m||vis[tx][ty]!=-1)continue; q.push(node{tx,ty}); vis[tx][ty]=t; } } } for(int i=1;i<=b;i++){ scanf("%d%d",&x,&y); printf("%d\n",vis[x][y]); } } ```
by lllllluogu @ 2024-01-03 19:31:02


|