hihoCoder 1093 最短路径·三:SPFA算法

来源:互联网 发布:小学生绘画软件下载 编辑:程序博客网 时间:2024/05/01 01:34



#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <vector>#define INF 0xfffffffusing namespace std;int n,m;struct node{    int x,l;};vector<node> edge[100005];int vis[100005];int dis[100005];void SPFA(int st){    queue<int>  q;    int i;    memset(vis,0,sizeof(vis));    for(i = 1; i <= n; i++)        dis[i] = INF;    dis[st] = 0;    q.push(st);    while(!q.empty()){        int cur = q.front();        q.pop();        vis[cur] = 1;        int l = edge[cur].size();        for(i = 0; i < l; i++){            int tmp = edge[cur][i].x;            if(dis[tmp] > dis[cur] + edge[cur][i].l){                dis[tmp] = dis[cur] + edge[cur][i].l;                if(!vis[tmp]){                    q.push(tmp);                    vis[tmp] = 1;                }            }        }        vis[cur] = 0;    }}int main(){    int st,en;    while(~scanf("%d%d%d%d",&n,&m,&st,&en)){        int a,b,c;        node tmp;        for(int i = 0; i < m; i++){            scanf("%d%d%d",&a,&b,&c);            tmp.x = b,tmp.l = c;            edge[a].push_back(tmp);            tmp.x = a;            edge[b].push_back(tmp);        }        SPFA(st);        printf("%d\n",dis[en]);    }    return 0;}


0 0
原创粉丝点击