SPFA

#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
const int inf=0x3f3f3f3f;
int n,m;
struct node{
    int v,w;
    node(){ }
    node(int _v,int _w){
        v=_v;
        w=_w;
    }
};
vector <node> g[maxn];
int dst[maxn];
queue <int> qu;
int inq[maxn];

int add(int u,int v,int w){
    g[u].push_back(node(v,w));
    g[v].push_back(node(u,w));
}

void spfa(int s){
    memset(dst,inf,sizeof dst);
    int u=s;
    dst[u]=0;
    qu.push(u);
    inq[u]=1;
    while(!qu.empty()){
        u=qu.front();
        qu.pop();
        inq[u]=0;
        for(int i=0;i<g[u].size();i++){
            int v=g[u][i].v;
            int w=g[u][i].w;
            if(dst[v]>dst[u]+w){
                dst[v]=dst[u]+w;
                if(!inq[v]){
                    qu.push(v);
                    inq[v]=1;
                }
            }
        }
    }
}

int main(){

    cin >> n >> m;

    int u , v , w;

    while (m--){

        cin >> u >> v >> w;

        add(u,v,w);}

    spfa(1);

    cout << dst[n]<<endl;

    return 0;

}

 
rush!
原文地址:https://www.cnblogs.com/LH2000/p/12404306.html