警示后人----MLE

P1746 离开中山路

sxshm @ 2023-09-13 19:46:52

如果你用的是BFS

并且用了标记数组

还MLE了

因为

需要在走的时候,标记已经走过了的点

比如

for(int i=0;i<4;i++){
    int nx=tmp.x+dx[i];
    int ny=tmp.y+dy[i];
    if(nx>0 && nx<=n && ny>0 && ny<=n && !vis[nx][ny]){
        q.push({nx,ny,tmp.step+1});
    }
}

要改成

for(int i=0;i<4;i++){
    int nx=tmp.x+dx[i];
    int ny=tmp.y+dy[i];
    if(nx>0 && nx<=n && ny>0 && ny<=n && !vis[nx][ny]){
        q.push({nx,ny,tmp.step+1});
        v[nx][ny]=1;//<------这里
    }
}

by 幻想繁星 @ 2023-09-13 19:48:11

不然呢?


by 幻想繁星 @ 2023-09-13 19:48:32

没看太懂您想表达什么


by sxshm @ 2023-09-13 20:07:22

这只是本蒟蒻看了讨论区后,把自己的wa代码改对了的心得而已,大神们自动跳过


by sxshm @ 2023-09-13 20:09:51

毕竟还是会有人再此处MLE


by heyx0201 @ 2023-09-13 20:12:21

这题dfs都可以过…


by sxshm @ 2023-09-13 20:18:48

可是不能局限于AC一道题


by sxshm @ 2023-09-13 20:19:37

这道题的正解难道不是BFS吗


|