1. #include<iostream>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<algorithm>
  5. #include<vector>
  6. #include<queue>
  7. #include<string.h>
  8. #include<stdlib.h>
  9. using namespace std;
  10. #define INF 0xfffffff
  11. #define N 1010
  12.  
  13. int maps[N][N], dist[N];//distance保存表示从起点到i点的距离 maps保存图
  14. bool visit[N];//标记这个店是否被参观过
  15. int point, side;//点,边
  16. void Init();
  17. int Dij(int Star, int End);
  18. int main()
  19. {
  20. while(cin >> point >> side, point + side)
  21. {
  22. Init();//Initial
  23. int pa, pb, i, t;
  24. for(i=0; i<side; i++)
  25. {
  26. cin >>pa>>pb>>t;
  27. maps[pa][pb]=min(maps[pa][pb], t);//因为也许反向走路的长度不同
  28. maps[pb][pa]=maps[pa][pb];
  29. }
  30. int answer=Dij(1, point);
  31. cout << answer << endl;
  32. }
  33. return 0;
  34. }
  35. void Init()
  36. {
  37. for(int i=0; i<=point; i++)
  38. {
  39. visit[i]=false;
  40. dist[i]=INF;
  41. for(int j=0; j<=i; j++)//其实不明白这里为什么这样写,即便是我自己写的
  42. maps[i][j]=maps[j][i]=INF;//真的很神奇,其实这就等同于for(int j=0; j<=point; j++) maps[i][j]=INF;
  43.  
  44. }
  45. }
  46. int Dij(int Star, int End)
  47. {
  48. dist[Star]=0;
  49. for(int i=1; i<=point; i++)
  50. {
  51. int index, Min;
  52. index=0, Min=INF;//index 代表与i距点最近的点的下标
  53. for(int j=1; j<=point; j++)
  54. {
  55. if(!visit[j]&&Min>dist[j])
  56. Min=dist[j], index=j;
  57. }//代表找到了距1点最近的一个点 这是一个二维矩阵
  58. visit[index]=true;
  59. for(int j=1; j<=point; j++)
  60. {
  61. if(!visit[j]&&dist[j]>dist[index]+maps[index][j])
  62. dist[j]=dist[index]+maps[index][j];
  63. }
  64. }
  65. return dist[End];
  66. }

  

  1. 连接表代码
  2. #include <iostream>
  3. #include <cstdlib>
  4. #include <cstdio>
  5. #include <algorithm>
  6. #include <vector>
  7. #include <queue>
  8. using namespace std;
  9. #define INF 0xfffffff
  10. #define maxn 1002
  11. struct node
  12. {
  13. int e, w;
  14. };
  15. vector<node> G[maxn];
  16. int dist[maxn];//表示从起点到第i点的距离
  17. bool vis[maxn];//判断这个点是否被参观过
  18. int m, n;//边数 m 顶点数 n
  19.  
  20. void Init()
  21. {
  22. memset(vis, false, sizeof(vis));
  23.  
  24. for(int i=; i<=n; i++)
  25. {
  26. dist[i] = INF;
  27. G[i].clear();
  28. }
  29. }
  30.  
  31. int Dij(int Star,int End)//起点 --- 终点
  32. {
  33. dist[Star] = ;
  34. for(int i=; i<=n; i++)
  35. {
  36. int index = , Min = INF;
  37. for(int j=; j<=n; j++)
  38. {
  39. if( !vis[j] && Min > dist[j] )//找出没有被参观过,并且距离起点最近的点
  40. Min = dist[j], index = j;
  41. }
  42. vis[index] = true;
  43. int len = G[index].size();
  44. for(int j=; j<len; j++)//更新所有未曾到达的点距离,使之成为最近的点
  45. {
  46. node P;
  47. P = G[index][j];
  48.  
  49. if( !vis[P.e] && dist[P.e] > dist[index] + P.w )
  50. {
  51. dist[P.e] = dist[index] + P.w;
  52. }
  53. }
  54. }
  55. return dist[End];
  56. }
  57.  
  58. int main()
  59. {
  60. node P;
  61. while(cin >> n >> m, m + n)
  62. {
  63. Init();
  64. int a, b , c;
  65.  
  66. for(int i=; i<m; i++)
  67. {
  68. cin >> a >> b >> c;
  69. P.e = b, P.w = c;
  70. G[a].push_back(P);
  71. P.e = a;
  72. G[b].push_back(P);
  73. }
  74.  
  75. int ans = Dij(,n);
  76. cout << ans << endl;
  77. }
  78. return ;
  79. }
 

HDU2544最短路模板,的更多相关文章

  1. POJ 2449Remmarguts' Date K短路模板 SPFA+A*

    K短路模板,A*+SPFA求K短路.A*中h的求法为在反图中做SPFA,求出到T点的最短路,极为估价函数h(这里不再是估价,而是准确值),然后跑A*,从S点开始(此时为最短路),然后把与S点能达到的点 ...

  2. poj1511/zoj2008 Invitation Cards(最短路模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Invitation Cards Time Limit: 5 Seconds    ...

  3. k短路模板 POJ2449

    采用A*算法的k短路模板 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  4. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  5. ACM-ICPC 2018 沈阳赛区网络预赛 D. Made In Heaven(第k短路模板)

    求第k短路模板 先逆向求每个点到终点的距离,再用dij算法,不会超时(虽然还没搞明白为啥... #include<iostream> #include<cstdio> #inc ...

  6. [poj2449]Remmarguts' Date(K短路模板题,A*算法)

    解题关键:k短路模板题,A*算法解决. #include<cstdio> #include<cstring> #include<algorithm> #includ ...

  7. 51nod_1445 变色DNA 最短路模板 奇妙思维

    这是一道最短路模板题,但是在理解题意和提出模型的阶段比较考验思维,很容易想到并且深深进入暴力拆解题目的无底洞当中. 题意是说:给出一个邻接矩阵,在每个点时,走且仅走向,合法路径中编号最小的点.问题是是 ...

  8. [hdu2544]最短路spfa

    解题关键:最短路模板一直没整理过,这里整理了一下spfa+链式前向星建图的最短路模板,以后网络赛省的打了. spfa算法的关键就是松弛操作,只有进行松弛操作,其后的点距离才可能被更新. #includ ...

  9. poj 2499第K短路模板

    第k*短路模板(单项边) #include <iostream> #include <cstdio> #include <algorithm> #include & ...

随机推荐

  1. Atitit. Object-c语言 的新的特性  attilax总结

    Atitit. Object-c语言 的新的特性  attilax总结 1.1. Object-C语言由 Brad J.Cox于20世纪80年代早期设计,1 1.2. Object-C新增的数据结构: ...

  2. Android中多线程编程(三)Handler更新UI的方式

    Handler更新UI的方式和原因以及遇到的问题 1.方式: 仅仅能通过Handler来更新UI. 代码例如以下: package com.chengdong.su.handlerdemo; impo ...

  3. YUV Player

    https://github.com/Yonsm/RawPlayer RawPlayer https://github.com/latelee/YUVPlayer YUVPlayer https:// ...

  4. 已经mock类中引用的其它service类,但是在invoke私有方法的时候,该service类是空值

    错误原因:没有在开始测试用例的时候,初始化类的所有注解方法. 解决方法: 使用mock方法创建mock对象时,需要在测试用例执行前执行以下代码.通常, 这句代码可以放在测试基类或者@Before 中. ...

  5. Rocchio算法

    一.引子 查询扩展(Query Expansion)是信息检索领域的一个重要话题. 一方面.用户本身可能会出错,他会输入一些错别字,比方把"冯小刚",错写成"冯晓刚&qu ...

  6. MS SQL 分类汇总参数 grouping(**)=1 rollup cubt

    转:http://www.111cn.net/database/mssqlserver/43368.htm 本文章介绍了关于sql多级分类汇总实现方法及数据结构,有碰到问题的同学可参考一下. 据库结构 ...

  7. Selenium+Python :WebDriver设计模式( Page Object )

    Page Object 设计原理 Page Object设计模式是Selenium自动化测试项目的最佳设计模式之一,强调测试.逻辑.数据和驱动相互分离. Page Object模式是Selenium中 ...

  8. history命令使用方法详解

    history是一条非常实用的shell命令,可以显示出之前在shell中运行的命令,配合last显示之前登录的用户,就可以追溯是哪个用户执行了某些命令.以下详细说明history使用中常见的命令或技 ...

  9. 关于function的一种常用用法

    关于function的一种常用用法 void Share::InitAcrossManager() { GsMgrEvent gsMgrEvents;//保存function的结构体 gsMgrEve ...

  10. 使用ILookup<TKey, TElement> 接口查找集合

    public class Program { public static void Main() { // 创建一个放入ilookup数据结构的School清单. List<School> ...