单源最短路径_Dijkstra算法
来源:互联网 发布:网络视频编解码器 编辑:程序博客网 时间:2024/05/21 21:48
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3790
Problem Description
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
Input
输入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)
(1<n<=1000, 0<m<100000, s != t)
Output
输出 一行有两个数, 最短距离及其花费。
Sample Input
3 21 2 5 62 3 4 51 30 0
Sample Output
9 11
#include<iostream>using namespace std;#define FINITY 0x7fffffff int d[1002][1002]; //长度int p[1002][1002]; //花费bool b[1002]; //标记是否已加入int n,m;int pv0[1002];int dv0[1002];void dijkstra(int v0){ //初始化 for(int i = 0;i<n;i++) { dv0[i]=d[v0][i];//初始化距离记录数组 pv0[i]=p[v0][i];//初始化花费记录数组 b[i] = false; } b[v0] = true; dv0[v0] = 0; //依次将其他的n-1个节点加入到集合中 for(int cishu = 1;cishu<n;cishu++) { int mind = FINITY; int minp = FINITY; int k;//选中的节点; for(int i =0;i<n;i++) { if(b[i]==false && mind>dv0[i]) { mind = dv0[i]; minp = pv0[i]; k = i; } } if(mind == FINITY) return; b[k] = true; //由于k的加入 更新d[v0][] for(int i = 0;i<n;i++) { if(b[i] == false && d[k][i]!= FINITY) { if(dv0[i] > mind + d[k][i]) { dv0[i] = mind + d[k][i]; pv0[i] = minp + p[k][i]; } else if(dv0[i] == mind + d[k][i] && pv0[i] >minp + p[k][i]) { pv0[i] = minp + p[k][i]; } } } }}int main(){ int s,t; while((cin>>n>>m) && (n||m)) { //初始化 for(int i = 0;i<n;i++) { for(int j = 0;j<n;j++) { d[i][j] = FINITY; p[i][j] = FINITY; } } //根据输入更新长度和花费 for(int i =0;i<m;i++) { int ta,tb,td,tp; //cin>>ta>>tb>>td>>tp; //这里用cin会超时,大量数据应用scanf输入 scanf("%d%d%d%d",&ta,&tb,&td,&tp); ta = ta -1; tb = tb -1; if(td<d[ta][tb]) { d[ta][tb] = d[tb][ta] = td; p[ta][tb] = p[tb][ta] = tp; } else if(td==d[ta][tb] && tp<p[ta][tb]) { p[ta][tb] = p[tb][ta] = tp; } } cin>>s>>t; dijkstra(s-1); cout<<dv0[t-1]<<" "<<pv0[t-1]<<endl; }}
0 0
- 单源最短路径_Dijkstra算法
- 图论_单源最短路径_Dijkstra
- 模板_Dijkstra最短路径算法
- 贪心法_单源最短路径_Dijkstra
- 最短路径_Dijkstra
- 【数据结构】最短路径_Dijkstra
- 最短路径_Dijkstra.c
- 图_dijkstra算法【数据结构实践报告】
- 大话数据结构 code 第七章 07最短路径_Dijkstra
- 【DayDayUp】【算法_图_最短路_之一_Dijkstra和几种优化姿势】
- 单源最短路径算法(Dijkstra算法)
- 单源最短路径算法(BellmanFord算法)
- Dijstra算法 单源最短路径算法
- 贪婪算法---单源最短路径
- 单源最短路径算法
- 单源最短路径 dijkstra算法
- 单源最短路径Dijkstra算法
- Dijkstra 单源最短路径算法
- 第十一周-OJ-A查闰年
- MySQL 分区表
- wemall app中基于JAVA通过Http请求获取json字符串的代码
- 关于RESTful架构项目的命名约定和for循环的资源优化
- 招投标行业应加快理顺政府市场关系
- 单源最短路径_Dijkstra算法
- 微信电脑版无法登陆
- 第十一周 判断三角形
- map的遍历
- 该错误的解决办法:Incorrect string value: '\xF0\x9F...' for column 'XXX' at row 1
- 开关中断与cpsid/cpsie指令
- 脚本 make
- strlen函数
- IOS-WKWebView的使用以及Cookie的处理