这是我某道广搜题代码的一部分。
void bfs(int x,int y,int who) {
queue<node> q;
q.push({x,y,0});
while (q.size()) {
node now=q.front();
q.pop();
nowx=now.x;
nowy=now.y;
nowstep=now.step;
if (vis[nowx][nowy]) continue; //<--
vis[nowx][nowy]=1;
if (who==1) time1[nowx][nowy]=nowstep;
else time2[nowx][nowy]=nowstep;
for (int i=0;i<4;i++) {
nx=nowx+dirx[i];
ny=nowy+diry[i];
if (nx<1||nx>n||ny<1||ny>m||a[nx][ny]=='#') continue;
q.push({nx,ny,nowstep+1});
}
}
}
void bfs(int x,int y,int who) {
queue<node> q;
q.push({x,y,0});
while (q.size()) {
node now=q.front();
q.pop();
nowx=now.x;
nowy=now.y;
nowstep=now.step;
vis[nowx][nowy]=1;
if (who==1) time1[nowx][nowy]=nowstep;
else time2[nowx][nowy]=nowstep;
for (int i=0;i<4;i++) {
nx=nowx+dirx[i];
ny=nowy+diry[i];
if (nx<1||nx>n||ny<1||ny>m||a[nx][ny]=='#') continue;
if (vis[nx][ny]) continue; //<--
q.push({nx,ny,nowstep+1});
}
}
}
vis 判定的位置不对,为何结果就不对?
(A 版本 AC,B 版本 TLE)