【算法模板】SPFA求最短路

#include<iostream>
#include<vector>
#include<queue>

using namespace std;

const int MAXN=1000+10;
const int INF=99999999;

struct data
{
    int u,v,w;
};

vector<data> g[MAXN];
queue<int> q;
int n,m,st,en,x,y,s,d[MAXN];
bool inque[MAXN];

void spfa(int st)
{
    d[st]=0;
    q.push(st);
    inque[st]=true;
    while(!q.empty())
    {
        int u=q.front();
        q.pop();
        inque[u]=false;
        for(int i=0;i<g[u].size();i++)
        {
            int v=g[u][i].v;
            int w=g[u][i].w;
            if(d[u]+w<d[v])
            {
                d[v]=d[u]+w;
                if(!inque[v])
                {
                    q.push(v);
                    inque[v]=true;
                }
            }
        }
    }
}

int main()
{
    cin>>n>>m>>st>>en;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>s;
        g[x].push_back((data){x,y,s});
        g[y].push_back((data){y,x,s});
    }
    for(int i=1;i<=n;i++)d[i]=INF;
    spfa(st);
    cout<<d[en];
    return 0;
}

猜你喜欢

转载自blog.csdn.net/ezluoyiqi/article/details/82957435