hdu3790-最短路径最小值
来源:互联网 发布:大英雄郑成功 知乎 编辑:程序博客网 时间:2024/05/29 04:51
dijkstra模板上加一个花费的判断,注意判重边。
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>using namespace std;const int maxn = 1005;const int INF = 0x7fffffff;int n,m;int Map[maxn][maxn], cost[maxn][maxn];void dijkstra(int st, int ed){ int vis[maxn], dis[maxn], val[maxn]; int v,minx; memset(vis, 0, sizeof(vis)); vis[st] = 1; for(int i=1; i<=n; i++) { dis[i] = Map[st][i]; val[i] = cost[st][i]; } for(int i=1; i<=n; i++) { minx = INF; for(int j=1; j<=n; j++) { if(!vis[j] && dis[j] < minx) { v = j; minx = dis[j]; } } vis[v] = 1; for(int j=1; j<=n; j++) { if(!vis[j] && Map[v][j] < INF) { if(dis[j] > dis[v]+Map[v][j]) { dis[j] = dis[v] + Map[v][j]; val[j] = val[v] + cost[v][j]; } else if(dis[j] == dis[v] + Map[v][j]) { val[j] = min(val[j], val[v] + cost[v][j]); } } } } printf("%d %d\n",dis[ed],val[ed]);}int main(){ while(scanf("%d%d",&n,&m)!=EOF && n) { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) Map[i][j] = cost[i][j] = INF; while(m--) { int a, b, d, p; scanf("%d%d%d%d", &a, &b, &d, &p); if(Map[a][b]>d || (Map[a][b]==d && cost[a][b]>p)) { Map[a][b] = Map[b][a] = d; cost[a][b] = cost[b][a] = p; } } int st, ed; scanf("%d%d",&st, &ed); dijkstra(st,ed); } return 0;}
阅读全文
0 0
- hdu3790-最短路径最小值
- hdu3790最短路径
- hdu3790 最短路径问题
- hdu3790 最短路径问题
- HDU3790--最短路径问题
- hdu3790 最短路径问题
- hdu3790 最短路径问题
- HDU3790:最短路径问题
- hdu3790 最短路径问题
- hdu3790最短路径问题
- hdu3790 最短路径问题
- hdu3790最短路径问题
- [hdu3790]最短路径问题
- HDU3790-最短路径问题
- hdu3790 最短路径问题
- HDU3790 最短路径问题
- HDU3790 最短路径问题
- HDU3790 最短路径问题
- Spring AOP中的动态代理机制
- 同步监视器之同步代码块、同步方法
- 使用eclipse创建一个maven+springMVC工程
- PHP函数可变函数列表
- 一步一步解决一个机器学习问题
- hdu3790-最短路径最小值
- C语言指针传递和内存分配
- 【二叉树经典问题】100. Same Tree
- web服务器与ftp服务器的区别
- Fingerprintjs2:一款开源设备指纹采集器
- 清华大学2003年机试-今年的第几天?-1070
- Unity Shader学习笔记:光照衰减
- 论文阅读FaceBox
- static关键字的作用