写一下SPFA和迪杰斯特拉的模版。。。第一次写博客,有错请提出哦!


SPFA的模版
#include<bits/stdc++.h>
using namespace std;
queue <int> q;
typedef pair <int , int> PII;
vector <PII> s[1000000];
int m,n,x,y,val,dian[1000000],zou[1000000],rankk,zhong;
main(){
    scanf("%d%d",&n,&m);//n个点,m条边; 
    for(int i=1;i<=m;i++)//存边,是无向图; 
    {
        scanf("%d%d%d",&x,&y,&val);
        s[x].push_back(PII(y,val));
        s[y].push_back(PII(x,val));
    }
    memset(dian,42,sizeof(dian));
    dian[1]=0;
    q.push(1);
    zou[1]=1;
    while(!q.empty())
    {
        rankk=q.front();
        q.pop();
        zou[rankk]=0;
        for(int i=0;i<s[rankk].size();i++)//枚举每一条边,判断是否可以更新; 
        {
            zhong=s[rankk][i].first;
            val=s[rankk][i].second;
            if(dian[zhong]>dian[rankk]+val)
            {
                dian[zhong]=dian[rankk]+val;
                if(zou[zhong]==1)
                    continue;
                q.push(zhong);
                zou[zhong]=1;
            }
        }
    }
    //这样,从1到X的最短距离就存在dian[x]里面的; 
}
//迪杰斯特拉的模版

#include<bits/stdc++.h> using namespace std; struct edge{ //只是一个结构体而已 ; int rank,val; }; priority_queue <edge> q; //优先队列,存着结构体; bool operator <(edge a,edge b) //为优先队列排序 { return a.val > b.val ; } typedef pair <int , int> PII; //第一个INT存着指向的编号,第二个INT存着距离; vector <PII> s[100000]; int n,m,x,y,val,zhong,rankk,dian[1000000],zou[1000000];//zou代表有没有走过,点代表从1到x点的距离dian[x]; main(){ scanf("%d%d",&n,&m);//n个点,m条边; for(int i=1;i<=m;i++)//存边,是无向图; { scanf("%d%d%d",&x,&y,&val); s[x].push_back(PII(y,val)); s[y].push_back(PII(x,val)); } memset(dian,42,sizeof(dian));//初始化点为无限大,最好不要用127,小心加起来时爆掉; edge E; E.rank = 1; q.push(E); //存入开始点的信息; zou[1] = 1; dian[1] = 0; while(!q.empty()) { rankk=q.top().rank;//队首的点的编号; q.pop(); if(zou[rankk]==1)//判断是否走过 ; continue; zou[rankk] = 1; for(int i=0;i<s[rankk].size();i++)//枚举每一条边,判断是否可以更新; { zhong=s[rankk][i].first; val=s[rankk][i].second; if(dian[zhong]>dian[rankk]+val) { dian[zhong]=dian[rankk]+val; edge E; E.rank = zhong; E.val = dian[zhong]; q.push(E);//可以更新就重新存入队列; } } } //这样,从1到X的最短距离就存在dian[x]里面的; }
原文地址:https://www.cnblogs.com/kczno1fans/p/7347860.html