一.最短路径的最优子结构性质

该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必定是从k到s的最短路径。下面证明该性质的正确性。

假设P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,则有P(i,j)=P(i,k)+P(k,s)+P(s,j)。而P(k,s)不是从k到s的最短距离,那么必定存在另一条从k到s的最短路径P'(k,s),那么P'(i,j)=P(i,k)+P'(k,s)+P(s,j)

二. Dijkstra算法

Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。

先给出一个无向图

用Dijkstra算法找出以A为起点的单源最短路径步骤如下

三. 代码

Java

static int[] testDijkstra(int n,int v,int[] dist,int[] prev,int[][] c){

int maxnum = 100;

int maxint = 999999;

boolean[] s = new boolean[maxnum];    // 判断是否已存入该点到S集合中

for(int i=1; i<=n; ++i)

{

dist[i] = c[v][i];

s[i] = false;     // 初始都未用过该点

if(dist[i] == maxint)

prev[i] = 0;

else

prev[i] = v;

}

dist[v] = 0;

s[v] = true;

// 依次将未放入S集合的结点中,取dist[]最小值的结点,放入结合S中

// 一旦S包含了所有V中顶点,dist就记录了从源点到所有其他顶点之间的最短路径长度

// 注意是从第二个节点开始,第一个为源点

for(int i=2; i<=n; ++i)

{

int tmp = maxint;

int u = v;

// 找出当前未使用的点j的dist[j]最小值

for(int j=1; j<=n; ++j)

if((!s[j]) && dist[j]

{

u = j;              // u保存当前邻接点中距离最小的点的号码

tmp = dist[j];

}

s[u] = true;    // 表示u点已存入S集合中

// 更新dist

for(int j=1; j<=n; ++j)

if((!s[j]) && c[u][j]

{

int newdist = dist[u] + c[u][j];

if(newdist

{

dist[j] = newdist;

prev[j] = u;

}

}

}

return dist;

}

dijkstra算法 java eclipse_数学:Dijkstra算法相关推荐

  1. 建模matlab的算法代码呀,数学建模算法打包

    数学建模十大算法程序详解(打包了) 十大算法 1说明.txt Floyd算法 floyd.txt 中国数学建模-数学工具-Floyd最短路算法的MATLAB程序.txt Newton插值.txt di ...

  2. 蚁群算法画图java_[转载]简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

  3. 蚁群算法java实现_简单蚁群算法 + JAVA实现蚁群算法

    一 引言 蚁群算法(ant colony optimization,ACO),又称蚂蚁算法,是一种用来在图中寻找优化路径的机率型技术.它由Marco Dorigo于1992年在他的博士论文中引入,其灵 ...

  4. l bfgs算法java代码_优化算法——拟牛顿法之L-BFGS算法

    一.BFGS算法 BFGS算法的校正公式: 利用Sherman-Morrison公式可对上式进行变换,得到 令 ,则得到: 二.BGFS算法存在的问题 在BFGS算法中.每次都要存储近似Hesse矩阵 ...

  5. 匈牙利算法java实现_匈牙利算法(Hungarian Algorithm)

    匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法.换句话说就是,在可以接受的时间内去做匹配. 1. 描述问题 给定2个集合A和B,然后将AB中的元素完成一个连线.(这不就是小时候的连线题么 ...

  6. 排序算法java快速排序_快速排序算法--Java实现

    标签(空格分隔): 数据结构与算法 原理: 对于任意一个无序数组,我们随机的选一个元素作为基准元素(例如:数组中的最后一个或者第一个元素, 然后我们将数组中的剩余元素分别与基准元素进行比较,将小于或等 ...

  7. 排序算法java源代码_排序算法汇总(java实现,附源代码)

    整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...

  8. adaboost算法java代码_04-04 AdaBoost算法代码(鸢尾花分类)

    [TOC] 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen121/p ...

  9. java资源分配算法,java - 资源分配与动态规划算法 - 堆栈内存溢出

    给定一组函数f1 ... fn(离散时间)和时间限制(int),应找到最大输出,即在不同函数之间分配时间以最大化所用函数输出的总和. 对于任何函数,任何时候的值表示如果用于所述时间的函数的总输出. 即 ...

最新文章

  1. POJ-1041 John's trip
  2. 有没搞错?Java 对象不使用时要赋值为 null?
  3. 国际C语言乱码大赛(IOCCC)经典之作
  4. matlab全景图像拼接_带你认识网络高清全景监控摄像机
  5. 【赠书】迁移学习如何入门,看看这本简明手册即可
  6. Qt Creator常用快捷键及技巧提升编码效率
  7. Java 面向对象的设计思维
  8. try... except异常处理结构
  9. 受检异常和非受检异常
  10. java中的技术_Java中的四个核心技术思想
  11. 数据库系统概论课后习题答案(第五版 王珊、萨师煊)
  12. max232cpe管脚电压
  13. 泰勒公式系列之二—完整公式推导
  14. 51单片机之串行通信
  15. 终止python程序的死循环_终的解释|终的意思|汉典“终”字的基本解释
  16. not discrete but [0, 1]. Specify a discrete sample time in
  17. 用计算机刻录光盘,刻录光盘,教您如何使用计算机将文件刻录到光盘上.
  18. 机器视觉实用工具集NO.16——指定监控区域运动物体闯入检测工具
  19. 移位操作---左移和右移
  20. liteos简介(一)

热门文章

  1. 【单片机】A/D模数转换实验
  2. 解析边界测试技术——健壮性测试、最坏情况测试、健壮最坏情况测试
  3. Endpoint Antivirus破解版|ESET Endpoint Antivirus中文破解版(附激活授权文件)下载 v7.1.2045.5
  4. 算法百题斩其三: 单源最短路与算法——其一
  5. c语言万年历查询程序代码,C语言小程序实现万年历
  6. OJ笔记 18718 航行
  7. ppt转换器免费下载
  8. 小学英语口语测试软件,小学英语口语交际测试
  9. 朴素贝叶斯 拉普拉斯平滑(Laplace Smoothing)
  10. av1 spec 下载地址