首页 > 代码库 > 题目1008:最短路径问题(SPFA算法)

题目1008:最短路径问题(SPFA算法)

题目链接:http://ac.jobdu.com/problem.php?pid=1008

详解连接:https://github.com/Pacsiy/JobDu

最短路径四种算法详解链接:http://blog.csdn.net/hjd_love_zzt/article/details/26739593

参考代码:

//// Created by AlvinZH on 2017/4/29.// Copyright (c) AlvinZH. All rights reserved.//#include <iostream>#include <cstdio>#include <string>#include <queue>using namespace std;#define MAX 1010#define INF 0x3f3f3f3fint dis[MAX];//dis[i]表示起点到i的最短距离int cost[MAX];//cost[i]表示起点到i的花费bool vis[MAX];//是否访问过点istruct node{    int dis,cost;}map[MAX][MAX];int n,m,a,b,d,p,s,t;void SPFA(){    for(int i=1;i<=n;i++)//初始化    {        dis[i]=INF;        cost[i]=INF;        vis[i]=false;    }    queue<int> q;    q.push(s);    dis[s]=0;    cost[s]=0;    vis[s]=true;    while(!q.empty())    {        int cur=q.front();        q.pop();        vis[cur]=false;        for(int i=1;i<=n;i++)        {            if(map[cur][i].dis!=INF&&dis[i]>=dis[cur]+map[cur][i].dis)            {                dis[i]=dis[cur]+map[cur][i].dis;                cost[i]=min(cost[i],cost[cur]+map[cur][i].cost);                if(!vis[i])                {                    vis[i]=true;                    q.push(i);                }            }        }    }}int main(){    while(~scanf("%d%d",&n,&m)&&n&&m)    {        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)            {                map[i][j].dis=INF;                map[i][j].cost=INF;            }        for(int i=1;i<=m;i++)        {            scanf("%d%d%d%d",&a,&b,&d,&p);            map[a][b].dis=map[b][a].dis=d;            map[a][b].cost=map[b][a].cost=p;        }        scanf("%d%d",&s,&t);        SPFA();        printf("%d %d\n",dis[t],cost[t]);    }    return 0;}

 

作者: AlvinZH

出处: http://www.cnblogs.com/AlvinZH/

本文版权归作者AlvinZH和博客园所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

题目1008:最短路径问题(SPFA算法)