题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874

  1. /************************************************************************/
  2. /*
  3. hdu 畅通工程续
  4. dijkstra求起始点到目标点最短距离
  5. 题目大意:求这些村子中从起始位置到目标点的最短距离
  6. 解题思路:dijkstra算法,求图中两个点的最短距离,
          dijkstra算法不同于prim算法,prim算法是求虽小生成树,
          不断地把点最近的点加入到集合中;而dijkstra算法是求源点到目标点的最短距离。
  7. */
  8. /************************************************************************/
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <algorithm>
  13.  
  14. #define MAX 0xfffffff
  15. const int N = ;
  16.  
  17. int dj[N],map[N][N],vis[N];
  18. int n,m,x,y,len,i,j;
  19.  
  20. void DJ(int start,int end)
  21. {
  22. int min,k;
  23. int t = n;
  24. int cur = start;
  25.  
  26. for(i=;i<n;dj[i++]=MAX);
  27. dj[start] = ;
  28. while()
  29. {
  30. min = MAX;
  31. vis[cur] = ;
  32. for(i = ; i < n; i++)
  33. {
  34. if(vis[i]==)continue;
  35. if(dj[i] > map[i][cur] + dj[cur])//////////
  36. dj[i] = map[i][cur] + dj[cur];
  37. if(min>dj[i])
  38. {
  39. min = dj[i];
  40. k = i;
  41. }
  42. }
  43. cur = k;
  44. if(cur == end)break;
  45. if(min == MAX)break;
  46. }
  47. printf("%d\n",dj[end]<MAX?dj[end]:-);
  48. }
  49.  
  50. int main()
  51. {
  52. while(scanf("%d%d",&n,&m)!= EOF)
  53. {
  54. memset(vis,,sizeof(vis));
  55. for (i = ; i < n; i++)
  56. for (j = ; j < n; j++)
  57. {
  58. map[i][j] = (i==j?:MAX);
  59. }
  60. for (i = ; i <= m; i++)
  61. {
  62. scanf("%d%d%d",&x,&y,&len);
  63. map[x][y] = map[y][x] = (map[x][y]<len?map[x][y]:len);
  64. }
  65. scanf("%d%d",&x,&y);
  66. DJ(x,y);
  67. }
  68. return ;
  69. }
  1. /************************************************************************/
  2. /*
  3. hdu 畅通工程续
  4. floyd 求起始点到目标点最短距离
  5. 题目大意:求这些村子中从起始位置到目标点的最短距离
  6. 解题思路:floyd 算法,求图中两个点的最短距离
  7. floyd算法就是在整个图中扫描,看点 i 到 j 的距离和
  8. (点 i 到点 k 的距离)+(点 k 到点 j 的距离)两者哪个较小,
  9. 把小的存入map[i][j]中即可。
  10. */
  11. /************************************************************************/
  12.  
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <algorithm>
  16.  
  17. #define MIN(a,b) a<b?a:b
  18. #define MAX 0xfffffff
  19. const int N = ;
  20.  
  21. int map[N][N];
  22. int n,m,x,y,len,i,j;
  23.  
  24. void floyd(int start,int end)
  25. {
  26. int k;
  27. for (k = ; k < n; k++)
  28. {
  29. for (i = ; i < n; i++)
  30. for (j = ; j < n; j++)
  31. map[i][j] = MIN(map[i][j],map[i][k]+map[k][j]);
  32. }
  33. printf("%d\n",map[start][end]<MAX?map[start][end]:-);
  34. }
  35.  
  36. int main()
  37. {
  38. while(scanf("%d%d",&n,&m)!= EOF)
  39. {
  40. for (i = ; i < n; i++)
  41. for (j = ; j < n; j++)
  42. {
  43. map[i][j] = (i==j?:MAX);
  44. }
  45. for (i = ; i <= m; i++)
  46. {
  47. scanf("%d%d%d",&x,&y,&len);
  48. map[x][y] = map[y][x] = (map[x][y]<len?map[x][y]:len);
  49. }
  50. scanf("%d%d",&x,&y);
  51. floyd(x,y);
  52. }
  53. return ;
  54. }

hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)的更多相关文章

  1. HDU 1874 畅通工程续(初涉dijkstra算法实现)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 dijkstra算法实现可参照此博客学习:http://www.cnblogs.com/biye ...

  2. hdu 1874 畅通工程续(模板题 spfa floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 spfa 模板 #include<iostream> #include<stdio ...

  3. HDU 1874 畅通工程续(模板题——Floyd算法)

    题目: 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰 ...

  4. ACM: HDU 1874 畅通工程续-Dijkstra算法

    HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  5. HDU 1874 畅通工程续-- Dijkstra算法详解 单源点最短路问题

    参考 此题Dijkstra算法,一次AC.这个算法时间复杂度O(n2)附上该算法的演示图(来自维基百科): 附上:  迪科斯彻算法分解(优酷) problem link -> HDU 1874 ...

  6. hdu 1874 畅通工程续

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过 ...

  7. HDU 1874畅通工程续(迪杰斯特拉算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)     ...

  8. hdu 1874 畅通工程续 Dijkstra

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1 ...

  9. HDU 1874 畅通工程续(最短路/spfa Dijkstra 邻接矩阵+邻接表)

    题目链接: 传送门 畅通工程续 Time Limit: 1000MS     Memory Limit: 65536K Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路. ...

随机推荐

  1. 江南白衣整理和开发的java常用工具类

    江南白衣的公众号的介绍文章:http://mp.weixin.qq.com/s/6JUo1vmUa-7SuDH6yIxKeQ github的地址:https://github.com/springsi ...

  2. 常见pip方法

    pip search 包名   查询 pip install  包名   安装包 pip show--files 包名 pip list --outdated  检查哪些包需要更新 pip insta ...

  3. python之模块 os

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块 os import os ''' FUNCTIONS abort(...)#暂不了解 a ...

  4. adb shell中的am pm命令

    adb shell中的am pm命令,一些自己的见解和大多数官网的翻译. am命令 am全称activity manager,你能使用am去模拟各种系统的行为,例如去启动一个activity,强制停止 ...

  5. codevs 2010 求后序遍历

    时间限制: 1 s空间限制: 64000 KB题目描述 Description输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列.输入描述 Input Description共两行,第一行一个字符 ...

  6. Win10激活KMS2.0

    目前,发现的唯一能激活Window10的纯净版. 下载地址: http://pan.baidu.com/s/1bpvMRBx 好孩子看不见: http://pan.baidu.com/s/1bo8xP ...

  7. 用命令行发邮件——让你更加了解smtp

    本文演示用命令行发送邮件的过程. SMTP 首先介绍下smtp协议--简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是事实上的在Internet传输em ...

  8. ios中tableview侧栏的折叠

    #import "ViewController.h" #define Ksmall 40.0f #define Klarge 80.0f #define KNoOpen @&quo ...

  9. lucene之中文分词及其高亮显示

    参考:http://www.cnblogs.com/lirenzhujiu/p/5914174.html http://www.cnblogs.com/xing901022/p/3933675.htm ...

  10. cd及目录快速切换

    一.cd   ~ 切换到用户目录 二.cd   - cd - 返回进入当前目录前所在目录 三.pushd.popd.dirs 在Linux的多目录命令提示符中工作是一种痛苦的事情,但以下这些利用lin ...