hdu 3790 最短路径问题 (Djikstra)
2015-08-28 14:43
351 查看
[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
给你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<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=1<<31-1; int map[1004][1004][2]; int v[1004],s1[1004],s2[1004]; int n; void dijk(int x) { v[x]=1; int i; for (i=1;i<=n;i++) { s1[i]=map[i][x][0]; s2[i]=map[i][x][1]; } while (1) { int m1=N,m2=N,p=x; for (i=1;i<=n;i++) { if (v[i]) continue; if (m1>s1[i]) { m1=s1[i]; m2=s2[i]; p=i; } else if (m1==s1[i]&&m2<s2[i]) { m2=s2[i]; p=i; } } if (p==x) break; v[p]=1; for (i=1;i<=n;i++) { if (v[i]) continue; if (s1[i]>s1[p]+map[p][i][0]) { s1[i]=s1[p]+map[p][i][0]; s2[i]=s2[p]+map[p][i][1]; } else if (s1[i]==s1[p]+map[p][i][0]&&s2[i]>s2[p]+map[p][i][1]) s2[i]=s2[p]+map[p][i][1]; } } } int main() { int m,i,j,a,b,c,d; while (~scanf("%d%d",&n,&m)) { if (n==0&&m==0) break; for (i=1;i<=n;i++) for (j=1;j<=n;j++) { map[i][j][0]=N; map[i][j][1]=N; } for (i=1;i<=m;i++) { scanf("%d%d%d%d",&a,&b,&c,&d); if (map[a][b][0]>c) { map[a][b][0]=map[b][a][0]=c; map[a][b][1]=map[b][a][1]=d; } else if (map[a][b][0]==c&&map[a][b][0]>d) { map[a][b][0]=map[b][a][0]=c; map[a][b][1]=map[b][a][1]=d; } } memset(v,0,sizeof(v)); scanf("%d%d",&a,&b); dijk(a); printf("%d %d\n",s1[b],s2[b]); } }
相关文章推荐
- redis获取自增长序号
- 互联网黑暗森林法则:想活?别喘气儿!
- Missing Number
- 采用commons-configuration包实现属性文件读取的工具类(hive下windows与linux下通用)
- 难题一箩筐 他把上万人的企业搬上了OA平台
- Maven中Spring-Data-Redis存储对象(redisTemplate)
- eclipse调试java程序的九个技巧
- 【MySQL】mysql join语法解析与性能分析
- 不要滥用架构隐喻
- 【HDU1255】【线段树】【扫描线】【面积】
- tomcat插件安装及项目部署
- 尝试打开或创建物理文件时,CREATE FILE 遇到操作系统错误 5
- 回忆丶开启Java之路
- 解决 eclipse 上 Keystore was tampered with, or password was incorrect
- linux基本的命令(目录管理,文件管理命令)
- springmvc学习
- tornado框架最简单实现
- solr搭建企业级应用搜索(转自http://blog.csdn.net/zdshare/article/details/17756121)
- 计算机网络A、B、C、D、E类地址总结
- 模板方法模式----深入浅出(一)