首页 > 代码库 > 题目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算法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。