最短路

Floyed

    for(int i=1;i<=e;i++){
        a=read();b=read();w=read();
        dis[a][b]=dis[b][a]=min(dis[a][b],w);
    }for(int i=1;i<=v;++i)  dis[i][i]=0;
    for(int l=1;l<=v;l++)
      for(int i=1;i<=v;i++)
            for(int j=1;j<=v;j++)
                    dis[j][i]=min(dis[i][j],dis[i][l]+dis[l][j]);

 

Dijkstra

void dij(int x)
{
    priority_queue< pair <int,int> >q;
    memset(dis,0x3f,sizeof(dis));dis[x]=0;
    q.push(make_pair(0,x));
    while(q.size()){
        int g=q.top().second;q.pop();
        for(int i=head[g];i;i=e[i].next){
            int to=e[i].t;
            if(dis[g]+e[i].w>dis[to]){
                dis[to]=dis[g]+e[i].w;
                q.push(make_pair(dis[to],to));
            }
        }
    }
}

Spfa

void spfa(int x)
{
    queue<int>q;
    memset(fl,0,sizeof(fl));
    memset(dis,1,sizeof(dis));//cout<<dis[0]<<endl;
    dis[x]=0;fl[x]=1;q.push(x);
    while(q.size()){
        int d=q.front();
        fl[d]=0;
        q.pop();
        for(int i=1;i<=num[d];i++)
            if(e[d][w[d][i]]>0&&dis[d]+e[d][w[d][i]]<dis[w[d][i]]){
                dis[w[d][i]]=dis[d]+e[d][w[d][i]];
                if(!fl[w[d][i]])  {q.push(w[d][i]);fl[w[d][i]]=1;}
            }
    }
}

 

posted @ 2022-09-19 11:11  yisiwunian  阅读(20)  评论(0编辑  收藏  举报