【问题描述】

建立一个从源点S到终点T的多段图,设计一个动态规划算法求出从S到T的最短路径值,并输出相应的最短路径。

  1. package org.xiu68.exp.exp4;
  2.  
  3. public class Exp4_1 {
  4. //建立一个从源点S到终点T的多段图,设计一个动态规划算法求出从S到T的最短路径值,并输出相应的最短路径。
  5. /*
  6. d[1] = 0
  7. for j = 2 to n:
  8. for all <i,j>∈E :
  9. d[j] = min{ d[i] + wij }
  10. return d[n]
  11. */
  12. public static void main(String[] args) {
  13. // TODO Auto-generated method stub
  14. int m=Integer.MAX_VALUE;
  15. int[][] edges=new int[][]{
  16. {m,1,2,5,m,m,m,m},
  17. {m,m,m,m,4,11,m,m},
  18. {m,m,m,m,9,5,16,m},
  19.  
  20. {m,m,m,m,m,m,2,m},
  21. {m,m,m,m,m,m,m,18},
  22. {m,m,m,m,m,m,m,13},
  23.  
  24. {m,m,m,m,m,m,m,2},
  25. {m,m,m,m,m,m,m,m},
  26. };
  27.  
  28. MGraph graph1=new MGraph(edges);
  29. graph1.minMultistageGraphPath(0, 7);
  30.  
  31. }
  32.  
  33. }
  34.  
  35. class MGraph{
  36. private int[][] edges; //有向图表示多段图
  37. private int vexNum; //顶点数量
  38.  
  39. public MGraph(int[][] edges){
  40. this.edges=edges;
  41. this.vexNum=edges.length;
  42. }
  43.  
  44. public void minMultistageGraphPath(int start,int end){
  45. int[] dist=new int[vexNum]; //从源点到该点的路径长度
  46. dist[start]=0;
  47.  
  48. int[] pre=new int[vexNum]; //在最短路径中该点的前一个顶点
  49. pre[start]=-1;
  50.  
  51. for(int j=1;j<vexNum;j++){
  52.  
  53. dist[j]=Integer.MAX_VALUE;
  54. pre[j]=-1;
  55.  
  56. for(int i=0;i<vexNum;i++){
  57. if(edges[i][j]!=Integer.MAX_VALUE && dist[j]>dist[i]+edges[i][j]){
  58. dist[j]=dist[i]+edges[i][j];
  59. pre[j]=i;
  60. }
  61. }
  62. }
  63.  
  64. //打印最短路径
  65. System.out.println(start+" to "+end+" is "+dist[end]);
  66.  
  67. String path=""+end;
  68. int preVex=pre[end];
  69.  
  70. while(preVex!=-1){
  71. path=preVex+"-->"+path;
  72. preVex=pre[preVex];
  73. }
  74. System.out.println("the path is:"+path);
  75. }
  76. }

Expm 4_1 多段图中的最短路径问题的更多相关文章

  1. 在图中寻找最短路径-----深度优先算法C++实现

    求从图中的任意一点(起点)到另一点(终点)的最短路径,最短距离: 图中有数字的点表示为图中的不同海拔的高地,不能通过:没有数字的点表示海拔为0,为平地可以通过: 这个是典型的求图中两点的最短路径:本例 ...

  2. Expm 4_2 有向无环图中的最短路径问题

    [问题描述] 建立一个从源点S到终点E的有向无环图,设计一个动态规划算法求出从S到E的最短路径值,并输出相应的最短路径. 解: package org.xiu68.exp.exp4; import j ...

  3. javascript实现有向无环图中任意两点最短路径的dijistra算法

    有向无环图 一个无环的有向图称做有向无环图(directed acycline praph).简称DAG 图.DAG 图是一类较有向树更一般的特殊有向图, dijistra算法 摘自 http://w ...

  4. 图中最短路径算法(Dijkstra算法)(转)

    1.Dijkstra 1)      适用条件&范围: a)   单源最短路径(从源点s到其它所有顶点v); b)   有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E ...

  5. Expm 10_1 带负权值边的有向图中的最短路径问题

    [问题描述] 对于一个带负权值边的有向图,实现Bellman-Ford算法,求出从指定顶点s到其余顶点的最短路径,并判断图中是否存在负环. package org.xiu68.exp.exp10; p ...

  6. Floyd-Warshall求图中任意两点的最短路径

    原创 除了DFS和BFS求图中最短路径的方法,算法Floyd-Warshall也可以求图中任意两点的最短路径. 从图中任取两点A.B,A到B的最短路径无非只有两种情况: 1:A直接到B这条路径即是最短 ...

  7. Expm 10_2 实现Ford-Fulkerson算法,求出给定图中从源点s到汇点t的最大流,并输出最小割。

    package org.xiu68.exp.exp10; import java.util.ArrayDeque; import java.util.ArrayList; import java.ut ...

  8. 图结构练习——最短路径(dijkstra算法(迪杰斯拉特))

      图结构练习——最短路径 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述  给定一个带权无向图,求节点1到节点n的最短路径.   ...

  9. Hanlp中N最短路径分词详细介绍

    N-最短路径 是中科院分词工具NLPIR进行分词用到的一个重要算法,张华平.刘群老师在论文<基于N-最短路径方法的中文词语粗分模型>中做了比较详细的介绍.该算法算法基本思想很简单,就是给定 ...

随机推荐

  1. 【洛谷P5018】对称二叉树

    题目大意:定义对称二叉树为每个节点的左右子树交换后与原二叉树仍同构的二叉树,求给定的二叉树的最大对称二叉子树的大小. 代码如下 #include <bits/stdc++.h> using ...

  2. 前端基础之html(一)

    https://www.cnblogs.com/haiyan123/p/7516060.html 一.初始html 1.web服务本质 import socket sock=socket.socket ...

  3. share.js一键分享到微博、QQ空间、QQ好友、微信、腾讯微博、豆瓣、Facebook、Twitter、Linkedin、Google+、点点等

    官网上面 https://github.com/overtrue/share.js非常详细的介绍了share.js他的使用 使用方式有:第一:使用 npm npm install social-sha ...

  4. pycharm git无法使用问题(待解决)

    PyCharm 2017.3.1 (Community Edition)Build #PC-173.3942.36, built on December 14, 2017JRE: 1.8.0_152- ...

  5. free命令常用参数详解

    free命令常用参数详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在运维期间我们会经常去查看服务器硬件信息,比如说内存,大家可能知道看内存用“[root@yinzhengji ...

  6. C#网络编程之编码解码

    这里是代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using S ...

  7. JS文本框获取焦点

    所谓焦点,就是鼠标移上文本框的时候那个一闪一闪的光标.

  8. CentOS6.8下安装xz命令

    我们有时候会下载到.xz结尾的压缩文件,这时候需要用到xz命令来解压这类文件,而当我们想要用yum -y install xz时,又没有关于xz的安装包,因此就找到一个xz的编译安装包进行编译安装. ...

  9. Mac下使用Wine安装PowerDesigner15

    下载: (链接: https://pan.baidu.com/s/1bpEYyIV 密码: 5ymj) 安装: 1.安装Wine 参考:http://www.cnblogs.com/EasonJim/ ...

  10. C++ 中 #ifndef, #define, #endif 宏定义

    目的:为了保证包含的内容只被程序(include) 和编译了一次.判断预处理器常量是否已被定义. 预编译将所有头文件(#include"XXX.h")用头文件中的内容来替换,头文件 ...