hdu 3790(最短路)
2016-05-26 09:11
387 查看
最短路径问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)[align=left]Problem Description[/align]
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
[align=left]Input[/align]
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
[align=left]Output[/align]
输出 一行有两个数, 最短距离及其花费。
[align=left]Sample Input[/align]
3 2
1 2 5 6
2 3 4 5
1 3
0 0
[align=left]Sample Output[/align]
9 11
解题思路:最短路水题,只需要在松弛操作部分改动一点点即可。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn = 1005; const int inf = 0x3f3f3f3f; int n,m,cnt,map[maxn][maxn],cost[maxn][maxn]; int dis[maxn],price[maxn]; bool vis[maxn]; void Dijkstra(int s,int t) { int k = s,MIN; memset(vis,false,sizeof(vis)); memset(dis,inf,sizeof(dis)); memset(price,inf,sizeof(price)); for(int i = 1; i <= n; i++) if(i != s) { dis[i] = map[s][i]; price[i] = cost[s][i]; } vis[k] = true; for(int i = 1; i < n; i++) { MIN = inf; for(int j = 1; j <= n; j++) { if(vis[j] == true) continue; if(MIN > dis[j]) { MIN = dis[j]; k = j; } } vis[k] = true; for(int j = 1; j <= n; j++) { if(vis[j] == true) continue; if(dis[j] > dis[k] + map[k][j]) { dis[j] = dis[k] + map[k][j]; price[j] = price[k] + cost[k][j]; } else if(dis[j] == dis[k] + map[k][j] && price[j] > price[k] + cost[k][j]) price[j] = price[k] + cost[k][j]; } } printf("%d %d\n",dis[t],price[t]); } int main() { int u,v,len,c,s,t; while(scanf("%d%d",&n,&m),n+m) { memset(map,inf,sizeof(map)); memset(cost,inf,sizeof(cost)); for(int i = 1; i <= m; i++) { scanf("%d%d%d%d",&u,&v,&len,&c); if(map[u][v] > len) { map[u][v] = map[v][u] = len; cost[u][v] = cost[v][u] = c; } else if(map[u][v] == len && cost[u][v] > c) cost[u][v] = cost[v][u] = c; } scanf("%d%d",&s,&t); Dijkstra(s,t); } return 0; }
相关文章推荐
- 初学图论-Kahn拓扑排序算法(Kahn's Topological Sort Algorithm)
- 初学图论-Bellman-Ford单源最短路径算法
- 初学图论-DAG单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法
- 初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现
- 封装好的Folyd建图,C++源码
- LCA模板
- 图论学习笔记之一——Floyd算法
- 【LCA】SPOJ QTREE2
- poj 3249 Test for Job 最长路
- HDU 2544
- Timus 1557 Network Attack DFS+各种各种...
- HDU1289 Tarjan-模板题
- Poj2638 网络流+最短路+二分答案
- Aizu1311 分层图最短路 (...大概)
- HDU 3631 Shortest Path
- 二分图匹配模板
- 最短路径 -- spfa
- POJ2377 Bad Cowtractors
- Six Degrees of Cowvin Bacon(最短路径floyd算法)