1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <queue>
  7. #include <cmath>
  8. #include <cstring>
  9. using namespace std;
  10. #define INF 0xfffffff
  11. #define maxn 40
  12.  
  13. struct Edge
  14. {
  15. int e, w;
  16. Edge(int e=,int w=) : e(e), w(w) {}
  17. };
  18. int Path[maxn], n, dist[maxn];
  19. bool vis[maxn];
  20. vector<Edge> G[maxn];
  21.  
  22. void Spfa(int Star,int End)
  23. {
  24. Edge P, Pn;
  25. dist[Star] = ;
  26. queue<Edge> Q;
  27. Q.push(Edge(Star,));
  28.  
  29. while( !Q.empty() )
  30. {
  31. P = Q.front();
  32. Q.pop();
  33. vis[P.e] = true;
  34.  
  35. int len = G[P.e].size();
  36.  
  37. for(int i=; i<len; i++)
  38. {
  39. Pn = G[P.e][i];
  40.  
  41. if(dist[Pn.e] > dist[P.e] + Pn.w)
  42. {
  43. dist[Pn.e] = dist[P.e] + Pn.w;
  44. Path[Pn.e] = P.e;
  45. if( !vis[Pn.e] )
  46. {
  47. Q.push(Pn);
  48. vis[Pn.e] = true;
  49. }
  50. }
  51. }
  52. }
  53. }
  54.  
  55. void PutPath(int Star,int End)
  56. {
  57. if(Star == End)
  58. {
  59. printf("%d", Star);
  60. return ;
  61. }
  62.  
  63. PutPath(Star, Path[End]);
  64.  
  65. printf("---->%d", End);
  66. }
  67. void Init()
  68. {
  69. for(int i=; i<=n; i++)
  70. {
  71. G[i].clear();
  72. dist[i] = INF;
  73. vis[i] = false;
  74. Path[i] = i;
  75. }
  76. }
  77.  
  78. int main()
  79. {
  80. int m;
  81. cin >> n >> m;
  82.  
  83. Init();
  84.  
  85. for(int i=; i<=m; i++)
  86. {
  87. int a, b, c;
  88. cin >> a >> b >> c;
  89. G[a].push_back(Edge(b,c));
  90. }
  91.  
  92. Spfa(, n);
  93.  
  94. printf("%d\n", dist[n]);
  95.  
  96. PutPath(,n);
  97.  
  98. return ;
  99. }
  100. /*
  101. 4 3
  102. 1 2 1
  103. 2 3 1
  104. 3 4 1
  105. */

SPFA 最短路径打印方法的更多相关文章

  1. DebugLog 打印方法执行时间

    DebugLog 打印方法执行时间 用于方便调试性能问题的打印插件.给访法加上@DebugLog,就能输出该方法的调用参数,以及执行时间. Project gradle配置 // Top-level ...

  2. 转网页WB.ExecWB控件打印方法

    网页WB.ExecWB控件打印方法 2010-02-01 12:48 代码: <table width="100%" cellpadding="1" on ...

  3. js打印方法总结

    前段时间做web项目用到了页面打印,在网上找了些资料,自己也试了很多方法,将这些方案列出下: 1.window.print()方法打印,所有主要浏览器都支持 print() 方法 这个方法很实用,只需 ...

  4. 实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法

    实现Square类,让其继承自Rectangle类,并在Square类增添新属性和方法,在2的基础上,在Square类中重写Rectangle类中的初始化和打印方法 #import <Found ...

  5. Swift中自定义Log打印方法

    系统如何调用super方法 系统默认只会在构造函数中,自动调用super.init()方法,而且是在所写方法的尾部进行调用. 在其他函数中,如何需要调用父类的默认实现,都需要手动去实现. 如果在构造函 ...

  6. Swift中自定义打印方法

    // 1.获取打印所在的文件 let file = ( #file as NSString).lastPathComponent // 2.获取打印所在的方法 let funcName = #func ...

  7. C/S模式下的打印方法

     C/S模式使用润乾报表时有两种打印方法(都使用设计器授权) 1.         使用加密狗打印 这种方式需要使用加密狗,适用于客户端较少时 2.         使用api调用打印方法实现打印 ...

  8. 使用打印方法时,要先引用命名空间: Using System.Drawing.Pringing

    使用打印方法时,要先引用命名空间: Using System.Drawing.Pringing PrintDocument类的重要属性和方法:属性:DocumentName  设置打印文档时要显示的文 ...

  9. Swift 自定义打印方法

    Swift 自定义打印方法 代码如下 // MARK:- 自定义打印方法 func MLLog<T>(_ message : T, file : String = #file, funcN ...

随机推荐

  1. Node.js【2】开发环境搭建(Windows、Linux&amp;Mac)

    安装方式有非常多种,以下仅仅是我喜欢的一种方式,安装的路径不一定要跟我一样. 眼下最新的版本号是v0.10.28 Windows 1.下载(放到E:\node\nodejs): http://node ...

  2. 怎样学好C语言,一个成功人士的心得!

    今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的 ...

  3. Linux Top 命令解析 比较详细--转

    TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中C ...

  4. 数据的存储-NSKeyedArchiver和write to file介绍

    数据的存储-NSKeyedArchiver和write to file介绍 首先介绍各个文件的作用-->讲解文件位置的查找方法-->介绍数据存储的方式:1.使用归档方式存储数据 2.wri ...

  5. 当ViewPager嵌套在ScrollView/ListView里时,手势冲突如何处理?

    有时我们需要将ViewPager嵌套在其他已经含有手势动作的ViewGroup里,如ScrollView,ListView时,会造成手势冲突,如表现为ViewPager向左划时,不小心向上移动了一点距 ...

  6. css样式之背景图片

    1.css样式背景之使用图片来做为背景 example: <!DOCTYPE html> <html> <head> <meta http-equiv=&qu ...

  7. 开发RESTful WebService

    RESTful风格的webservice越来越流行了,sun也推出了RESTful WebService的官方规范:JAX-RS,全称:Java API for RESTful WebService. ...

  8. (转)dedecms [field:array runphp='yes']标签使用技巧

    field支持用array获取任意字段的值:(支持标记:文章内容模板的 {dede:field name=’array’ /}.arclist.arclistsg.loop.sql 标签) 我们平时常 ...

  9. Xml解析之——Java/Android/Python

    Xml解析之——Java/Android/Python 一.Xml文件 test.xml <note> <to>George</to> <from>Jo ...

  10. Protocol Buffer Xcode 正确使用思路 成功安装 Xcode7.1

    1. 下载protobuf编译工具 序列化是将数据转换为一个特定的类 http://pan.baidu.com/s/1qWrxHxU 下载解压,它不是用来放在你的项目里 2.打开终端 依次输入并等待指 ...