Bfs搜索一个小技巧

void bfs(int sx,int sy)
{
    queue<node>q;
    vis[sx][sy]=true;
    q.push(node{sx,sy});
    while(!q.empty())
    {
        node pre=q.front();
        q.pop();
        for(int i=0;i<8;i++)
        {
            int X=pre.x+dx[i];
            int Y=pre.y+dy[i];
            if(vis[X][Y]||out(X,Y)||mapl[X][Y]=='X')continue;
            vis[X][Y]=true;
            q.push(node{X,Y});
        }        
    }
}

要把vis放在插入queue前,

而不是从queue取出节点之后,不然会超时

posted @ 2021-01-02 16:34  TheDa  阅读(63)  评论(0编辑  收藏  举报