SPFA算法模板(邻接阵)

void SPFA(int src)

{

    queue<int> myqueue;

    int i,j;

    memset(final,0,sizeof(final));

    memset(pre,-1,sizeof(pre));

    myqueue.push(src);

    for(i=0;i<=ncount;++i)      //SPFA算法与Dij不同,SPFA初始化时将除源点以外所有点的最短距离初始化无穷大 

    {

        d[i] = maxData;

    }

    d[src] = 0;        //源点最短距离设置成0 

    final[src] = true;

    while(!myqueue.empty())     //SPFA算法可入队列多次 

    {

        int frontint = myqueue.front();myqueue.pop();

        final[frontint] = false;

        for(i=0;i<=ncount;++i)  //遍历所有结点 

        {

            if(dis[frontint][i]<maxData && d[i]>d[frontint]+dis[frontint][i])    

            {

                d[i] = d[frontint]+dis[frontint][i];

                pre[i] = frontint;             //修改前驱 

                if(!final[i])

                {

                    final[i] = true;

                    myqueue.push(i);

                }

            }

        }

    }

}







你可能感兴趣的:(SPFA)