最短路径问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 19982    Accepted Submission(s): 5945

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)
 
Output
输出 一行有两个数, 最短距离及其花费。
 
Sample Input
  1. 3 2
  2. 1 2 5 6
  3. 2 3 4 5
  4. 1 3
  5. 0 0
 
Sample Output
  1. 9 11
 
Source

  1. #include<stdio.h>
  2. #include<string.h>
  3. #define INF 0xfffffff
  4. int mapd[1010][1010],mapp[1010][1010],vis[1010];
  5. int d1[1010],d2[1010],m,n;
  6. void dijkstra(int v)
  7. {
  8. int i,j,k;
  9. vis[v]=1;
  10. for(i=1;i<=m;i++)
  11. {
  12. d1[i]=mapd[v][i];
  13. d2[i]=mapp[v][i];
  14. }
  15. for(i=0;i<m;i++)
  16. {
  17. int min=INF;
  18. k=-1;
  19. for(j=1;j<=m;j++)
  20. {
  21. if(!vis[j]&&d1[j]<min)
  22. {
  23. k=j;
  24. min=d1[j];
  25. }
  26. }
  27. if(k==-1) break;
  28. vis[k]=1;
  29. for(j=1;j<=m;j++)
  30. {
  31. if(!vis[j]&&d1[j]>d1[k]+mapd[k][j])
  32. {
  33. d1[j]=d1[k]+mapd[k][j];
  34. d2[j]=d2[k]+mapp[k][j];
  35. }
  36. if(!vis[j]&&d1[j]==d1[k]+mapd[k][j]&&d2[j]>d2[k]+mapp[k][j])
  37. {
  38. d2[j]=d2[k]+mapp[k][j];
  39. }
  40. }
  41. }
  42. }
  43. int main()
  44. {
  45. int i,j,k,s,e;
  46. while(scanf("%d%d",&m,&n),m||n)
  47. {
  48. for(i=0;i<=m;i++)
  49. for(j=0;j<=m;j++)
  50. {
  51. mapd[i][j]=mapd[j][i]=INF;
  52. mapp[i][j]=mapp[j][i]=INF;
  53. }
  54. int a,b,c,d;
  55. memset(vis,0,sizeof(vis));
  56. memset(d1,0,sizeof(d1));
  57. memset(d2,0,sizeof(d2));
  58. while(n--)
  59. {
  60. scanf("%d%d%d%d",&a,&b,&c,&d);
  61. if(c<mapd[a][b])
  62. {
  63. mapd[a][b]=mapd[b][a]=c;
  64. mapp[a][b]=mapp[b][a]=d;
  65. }
  66. }
  67. scanf("%d%d",&s,&e);
  68. dijkstra(s);
  69. printf("%d %d\n",d1[e],d2[e]);
  70. }
  71. return 0;
  72. }

 

hdoj--3790--最短路径问题(双权值迪杰斯特拉)的更多相关文章

  1. hdu 3790 最短路径问题(双重权值,dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...

  2. [链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]

    最短路径—Dijkstra算法和Floyd算法 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算 ...

  3. 最短路径之迪杰斯特拉(Dijkstra)算法

    对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...

  4. 最短路径 - 迪杰斯特拉(Dijkstra)算法

    对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...

  5. 算法与数据结构(六) 迪杰斯特拉算法的最短路径(Swift版)

    上篇博客我们详细的介绍了两种经典的最小生成树的算法,本篇博客我们就来详细的讲一下最短路径的经典算法----迪杰斯特拉算法.首先我们先聊一下什么是最短路径,这个还是比较好理解的.比如我要从北京到济南,而 ...

  6. 迪杰斯特拉(Java)

    public class Dijsktra { public static void main(String[] args) { Dijsktra d=new Dijsktra(); int[][] ...

  7. HDU 3790(两种权值的迪杰斯特拉算法)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    ...

  8. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  9. 最短路径之迪杰斯特拉(Dijkstra)算法

    迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...

随机推荐

  1. gitlab 第1次提交代码到1个新仓库

    1.如果是本地刚刚搭建好git环境,第一次和gitlab服务器产生连接 参照这个文 https://www.cnblogs.com/kaerxifa/p/10929098.html 2.已经和gitl ...

  2. php base64互转pdf

    /* * base64转pdf */ function base642pdf($formTxt,$toPdf) { $file = file_get_contents($formTxt);//读 $d ...

  3. Sersync+Rsync实现数据文件实时同步

    rsync+inotify-tools与rsync+sersync架构的区别1,rsync+inotify-tools只能记录下被监听的目录发生的变化(增删改)并没有把具体变化的文件或目录记录下来在同 ...

  4. idea中配置xml不自动提示解决方案

    1.打开设置File-->Settings(或者Ctrl + Alt + S)--->Languages&Frameworks-->Schemas and DTDS 2.选择 ...

  5. react 子组件给父组件传值

    import React from 'react'import '../page1/header.css'import { Table } from 'antd'import Child from ' ...

  6. ie 浏览器下ajax请求来自缓存的解决方法

    如上图所示,在ie浏览器下发出的请求,如何缓存中已经出现过这条请求记录,则不会请求服务端数据,解决方法是在请求后增加一个随机数,使每次请求都不同*可以添加当前时间戳 url+'?t='+Date.no ...

  7. [LUOGU] 4933 大师

    \(Orz\) \(ljt12138!\) 设状态\(f[i][j]\)表示以\(i\)为结尾,公差为\(j\)的长度大于\(1\)的数列有几个. 然后转移方程就很好想了. \(k=H[i]-H[j] ...

  8. Vmware在NAT模式下网络配置详解

    Vmware在NAT模式下网络配置详解 Linux中的网络配置对于接触Linux不久的小白菜来说,还是小有难度的,可能是不熟悉这种与windows系列迥然不同的命令行操作,也可能是由于对Linux的结 ...

  9. 第五节:numpy之数组维度处理

  10. JavaScript初步学习----基本使用,简单事件,修改样式,数据类型

    JavaScript基本使用 JavaScript原名叫livescript,是一门动态类型,弱类型基于原型的脚本语言   用于页面特效,前后交替,后台开发(node)   JavaScript写在s ...