HDU 3790最短路径问题 dijikstra算法
2016-04-14 22:08
399 查看
//赛码网 3790
*
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1
3 2
1 2 5 6
2 3 4 5
1 3
0 0
输出 一行有两个数, 最短距离及其花费。
9 11
*/
*
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1
3 2
1 2 5 6
2 3 4 5
1 3
0 0
输出 一行有两个数, 最短距离及其花费。
9 11
*/
#include<iostream> using namespace std; const int INFINITY = 0xffffff; const int MAX = 1000+10; int n,m; int Dist[MAX][MAX],Cost[MAX][MAX]; int min_dist,min_cost; int beg,endd; void dijikstra() { int i,j; bool visit[MAX]; int dist[MAX]; int cost[MAX]; int min,tempv; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { dist[j] = Dist[beg][j]; cost[j] = Cost[beg][j]; visit[j] = false; } } dist[beg] = 0; visit[beg] = true; //cost[beg] = 0; for(i=0;i<m;i++) { //找最短的一条路 min = INFINITY; tempv = beg; for(j=1;j<=n;j++) { if(!visit[j] && min>dist[j]) { tempv = j; min = dist[j]; } } visit[tempv] = true; for(j=1;j<=n;j++) { if(!visit[j] && min + Dist[tempv][j] < dist[j]) { dist[j] = min+Dist[tempv][j]; cost[j] = cost[tempv] + Cost[tempv][j]; } else if(!visit[j] && min + Dist[tempv][j] == dist[j]) { if(cost[j]>cost[tempv] + Cost[tempv][j]) cost[j] = cost[tempv]+Cost[tempv][j]; } } if(visit[endd]) { min_dist = dist[endd]; min_cost = cost[endd]; return; } } min_cost = cost[endd]; min_dist = dist[endd]; return; } int main() { int a,b,d,p; int i,j; while(scanf("%d%d",&n,&m)) //需要注意这里,最好用scanf,不要用cin { if(n==0 && m==0) break; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { Dist[i][j] = Dist[j][i]= INFINITY; Cost[i][j] =Cost[j][i] = INFINITY; } } for(i=0;i<m;i++) { scanf("%d%d%d%d",&a,&b,&d,&p); if(Dist[a][b]>d) { Dist[a][b] = Dist[b][a] = d; Cost[a][b] = Cost[b][a] = p; } } scanf("%d%d",&beg,&endd); dijikstra(); printf("%d %d\n",min_dist,min_cost); } }
相关文章推荐
- jquery之ajaxfileupload异步上传插件
- 基于MVC项目iOS项目重构的思路
- 复利计算
- OneZero第四周第四次站立会议(2016.4.14)
- 稀疏矩阵的加法(用十字链表实现A=A+B)
- [CodeForces 573B] Bear and Blocks (脑洞题)
- Oracle-26-内连接(等值、不等值连接、自然连接)&外连接(左外、右外、全连接)&using子句
- 微软等面试100题系列 - 45(3)
- java之迭代对象Iterator的使用方法
- 20145313张雪纯 《Java程序设计》第7周学习总结
- C++编程基础笔记章节二
- Java BIO、NIO、AIO 学习
- hdu5001(概率dp)
- Java邮件开发-----JavaMail(三)
- hdu 2181.。。。
- 浅谈复杂链表的复制
- static final abstract
- 基于 HTML5 的人脸识别技术
- Krito的讨伐(bfs加上优先队列)
- HDU 2066 一个人的旅行dijikstra算法