首页 > 其他 > 详细

BFS队列优化

时间:2019-08-07 09:39:15      阅读:74      评论:0      收藏:0      [点我收藏+]

$inq[u]$表示$u$是否在队列中(important)

该方法也使用与SPFA

void bfs()
{
    int l=0,r=1;
    memset(dis,1,sizeof(dis));
    q[1].x=1,dis[1]=0,inq[1]=1;
    while (l<r)
    {
        ++l;
        node now=q[l];
        inq[now.x]=0;
        //出队之后,inq[u]=0;
        for (int i=first[now.x];i!=-1;i=nxt[i])
        {
            int u=point[i],dd=dis[now.x]+val[i];
            //注意此处不用now.d,要用结构体外的dis数组!!!!!! 
            checkmin(dis[u],dd);
            //更新最小值
            if (inq[u])
            {
                continue;
                //已入队的点直接更新即可,不用再入队。
            }
            else
            {
                ++r;
                q[r].x=u;
                inq[u]=1;
            }
        }
    }
    for (int i=1;i<=n;++i)
    {
        printf("%d\n",dis[i]);
    }
}

BFS队列优化

原文:https://www.cnblogs.com/mayiyang/p/11312884.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!