HDU-3970 最短路径问题
来源:互联网 发布:食品的分销网络 编辑:程序博客网 时间:2024/05/22 06:41
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1000 + 5;const long long INF = 0x7fffffff;int sign[maxn];struct node{ long long len; long long cost;} graph[maxn][maxn], root[maxn];int n, m, op, ed;void Dijkstra(){ memset(sign, 0, sizeof(sign)); for(int i = 1; i <= n; i ++) { root[i].len = graph[op][i].len; root[i].cost = graph[op][i].cost; } sign[op] = 1; for(int k = 1; k <= n; k ++) { long long min_amount = INF; long long min_money = INF; int minn; for(int i = 1; i <= n; i ++) if(!sign[i] && (root[i].len < min_amount || (root[i].len == min_amount && root[i].cost < min_money))) { minn = i; min_amount = root[i].len; min_money = root[i].cost; } sign[minn] = 1; for(int i = 1; i <= n; i ++) if(!sign[i]) { long long temp_len = root[minn].len + graph[minn][i].len; long long temp_cost = root[minn].cost + graph[minn][i].cost; if(temp_len < root[i].len || (root[i].len == temp_len && temp_cost < root[i].cost)) { root[i].len = temp_len; root[i].cost = temp_cost; } } }}int main(){ while(~scanf("%d %d", & n, & m)) { if(!n && !m) break; for(int i = 1; i <= n; i ++) for(int j = 1; j <= n; j ++) { graph[i][j].len = INF; graph[i][j].cost = INF; } int a, b, c, d; while(m --) { scanf("%d %d %d %d", & a, & b, & c, & d); if(c < graph[a][b].len || (c == graph[a][b].len && d < graph[a][b].cost)) { graph[a][b].len = c; graph[a][b].cost = d; graph[b][a].len = c; graph[b][a].cost = d; } } scanf("%d %d", & op, & ed); Dijkstra(); printf("%I64d %I64d\n", root[ed].len, root[ed].cost); } return 0;}题意:
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。输入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)
题解:
也就是在上一题的基础上增加了花费的问题。注意重边。我一开始minn = op 用下标查找,但是这次错在了这里,但并不清楚原因。因为我认为root[op]的值始终等于INF,所以想用root[op]代替判断条件中的INF省点语句。但这次错了。还有就是while(1){if(root[minn] == INF) break;}用在这里跳出循环不行,会无限循环导致超时(具体原因还是不知)。
0 0
- HDU-3970 最短路径问题
- 最短路径问题 HDU
- 【最短路径-Dis】hdu 3790 最短路径问题
- hdu 3790 最短路径问题
- hdu 3790 最短路径问题
- HDU-3790-最短路径问题
- HDU 3790 最短路径问题
- hdu 3790 最短路径问题
- Hdu 3790 最短路径问题
- HDU 3790 最短路径问题
- HDU 3790 最短路径问题
- hdu 3790 最短路径问题
- hdu 3790 最短路径问题
- 最短路径问题 hdu 3790
- hdu 3790 最短路径问题
- HDU 2544最短路径问题
- hdu 3790 最短路径问题
- hdu--最短路径问题--3790
- jxl问题,报错如下 Exception in thread "main" java.lang.NoClassDefFoundError: jxl/write/WritableCell
- configure: error: C++ compiler cannot create executables
- leetcode:Shortest Palindrome
- 盒模型
- poj 1091 跳蚤(最大公约数原理+容斥原理)
- HDU-3970 最短路径问题
- 关于STM32中NVIC的理解,带错误例子
- Android百分比布局支持库(android-percent-support)
- 决定换博客了
- stm32之spi总结1
- JavaScript中字符串转JSON或者XML
- 希望自己可以更好
- HDOJ1421 搬寝室(dp)
- ArrayList 和 练习