SPFA模板

来源:互联网 发布:linux怎么保存文件 编辑:程序博客网 时间:2024/06/05 06:50
SPFA实际上就是一个利用队列慢优化的一个算最短路的算法
#include <bits/stdc++.h>using namespace std;const int maxn = 205;int n,m;int d[maxn],inq[maxn];vector<pair<int ,int > >E[maxn];void init(){    for(int i = 0;i < maxn;i++) E[i].clear();    for(int i = 0;i < maxn;i++) inq[i] = 0;    for(int i = 0;i < maxn;i++) d[i] = 1e9;}int main(){    while(cin>>n>>m){        init();        for(int i = 0;i < m;i++){            int x,y,z;            scanf("%d%d%d",&x,&y,&z);            E[x].push_back(make_pair(y,z));            E[y].push_back(make_pair(x,z));        }        int s,t;        scanf("%d%d",&s,&t);        queue<int>Q;        Q.push(s),d[s] = 0,inq[s] = 1;        while(!Q.empty()){            int now = Q.front();            Q.pop();inq[now] = 0;            for(int i = 0;i < E[now].size();i++){                int v = E[now][i].first;                if(d[v] > d[now]+E[now][i].second){                    d[v] = d[now]+E[now][i].second;                    if(inq[v] == 1) continue;                    inq[v] = 1;                    Q.push(v);                }            }        }        if(d[t] == 1e9) cout<<"-1"<<endl;        else cout<<d[t]<<endl;    }    return 0;}

0 0
原创粉丝点击