1:dijstra算法常用语求最短距离,

dijstra每次从未发现节点n[]中,发现距离源点最短的节点m,求出最短节点后,将m添加到已发现节点y[]中,用该节点m进行更新其它未发现节点n[]-m的最短距离。直到发现所有节点

证明:m为什么是距离源点s的最短距离,

因为在未发现节点中该节点距离最短,所以不会有从s到n[]-m再到m的距离和小于s到m。

在已发现节点y[]中,从s到y[]再到m的距离和,如果有小于s到m的距离,那么在求得s>y[i]的最短距离时,就已经用(s>y[i])+(y[i]>m)替换掉s>m的距离了。所以不会存在这种情况

代码:

package com.li.chapter24.mydijstra;

import java.io.InputStream;
import java.util.Scanner; /**
* @program: GradleTestUseSubModule
* @author: Yafei Li
* @create: 2018-06-28 19:45
* 自己编写迪杰斯特拉算法 ,解决图论及其应用 1.4节 a到b的最短路问题
**/
public class MyDijStraAlgorithm { public static void main(String[] args){
MyDijStraAlgorithm dijStraAlgorithm=new MyDijStraAlgorithm();
int[] minDisArr = dijStraAlgorithm.dijstra(0);
for (int i = 0; i < minDisArr.length; i++) {
System.out.println(minDisArr[i]);
}
}
//vertx输入的源点
public int[] dijstra(int vertx) { int[][] arrWeight=getArrOfGraph();
int[] arrVertx = arrWeight[vertx]; //其它节点与vertx的距离 boolean[] isFound = new boolean[arrVertx.length];
isFound[vertx]=true; for (int i = 0; i < arrVertx.length; i++) { //遍历所有的点
int mindis=Integer.MAX_VALUE;
int v=vertx;
for (int j = 0; j < arrVertx.length; j++) {
if (!isFound[j]) {
if (mindis > arrVertx[j]) {
mindis = arrVertx[j];
v=j;
}
}
} isFound[v]=true; for (int j = 0; j < arrVertx.length; j++) {
if (!isFound[j]) {
if (mindis + arrWeight[v][j] < arrVertx[j]) { //vertx到v的距离加上v到j的距离
arrVertx[j]=mindis + arrWeight[v][j];
}
}
}
}
return arrVertx; } public int[][] getArrOfGraph() {
Class clazz = this.getClass();
InputStream ins = clazz.getResourceAsStream("/data2.txt");
Scanner scanner = new Scanner(ins);
int[][] intarr = new int[8][8];
int row=0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] strarr = line.split(" ");
for (int i = 0; i < strarr.length; i++) {
intarr[row][i] = Integer.parseInt(strarr[i]);
}
row++;
}
return intarr;
}
}

下面为数据,放到resource下

下面的数据表示,行号,列号代表节点 ,节点为0-7

其中8表示为 第0个节点到第4个节点的距离为8

999代表两个节点之间没有相邻,说明它们的距离无穷大

0 2 999 999   1 999
2 0 1 999 6 999 999 999
999 1 0 9 4 3 999 999
999 999 9 0 999 6 999 2
8 6 4 999 0 2 7 2
999 999 3 6 2 0 999 4
1 999 999 999 7 999 0 9
999 999 999 2 2 4 9 0

dijstra算法,求源点到各个顶点的最短距离的更多相关文章

  1. Dijstra算法求最短路径

    参考博客:http://blog.51cto.com/ahalei/1387799        与Floyd-Warshall算法一样这里仍然使用二维数组e来存储顶点之间边的关系,初始值如下.   ...

  2. Bellman_Ford算法(求一个点到任意一点的最短距离)

    单源最短路问题是固定一个起点,求它到任意一点最短路的问题. 记从起点出发到顶点 i 的最短距离为d[i],则有以下等式成立 d[i]=min{d[j]+(从j到 i 的边的权值) 看代码 #inclu ...

  3. Dijkstra算法(求一点到任意一点的最短距离)

    思路:先找出最短的一个点,也就是起点,从起点出发,找最短的边,同时标记起点为true(代表已经访问过),访问过的点就不用再访问了,依次下去,保证每一次找到的边都是最短的边 到最后没有边可以更新了就代表 ...

  4. _DataStructure_C_Impl:Floyd算法求有向网N的各顶点v和w之间的最短路径

    #include<stdio.h> #include<stdlib.h> #include<string.h> typedef char VertexType[4] ...

  5. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  6. 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径

    自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...

  7. Dijstra算法-------为了纪念,等以后看的时候方便

    杭电problem2066 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  8. sw算法求最小割学习

    http://  blog.sina.com.cn/s/blog_700906660100v7vb.html 转载:http://www.cnblogs.com/ylfdrib/archive/201 ...

  9. Dijkstra算法求最短路径 Java实现

    基本原理: 迪杰斯特拉算法是一种贪心算法. 首先建立一个集合,初始化只有一个顶点.每次将当前集合的所有顶点(初始只有一个顶点)看成一个整体,找到集合外与集合距离最近的顶点,将其加入集合并检查是否修改路 ...

随机推荐

  1. php常用的正则表达式

    1. 平时做网站经常要用正则表达式,下面是一些讲解和例子,仅供大家参考和修改使用:2. "^\d+$" //非负整数(正整数 + 0)3. "^[0-9]*[1-9][0 ...

  2. jvm 调整tomcat的堆内存和常驻内存catalina.sh

    4.2 性能优化 tomcat性能取决于你的内存大小 上策:优化代码 中策:jvm优化机制  垃圾回收机制 把不需要的内存回收   优化jvm--优化垃圾回收策略 优化catalina.sh配置文件. ...

  3. Java中float/double取值范围与精度

    Java浮点数 浮点数结构 要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个 ...

  4. Javascript 验证上传图片大小[客户端验证]

    需求分析: 在做上传图片的时候,如果不限制上传图片大小,后果非常的严重.那么我们怎样才可以解决一个棘手的问题呢?有两种方式: 1)后台处理: 也就是AJAX POST提交到后台,把图片上传到服务器上, ...

  5. Softmax vs. Softmax-Loss VS cross-entropy损失函数 Numerical Stability(转载)

    http://freemind.pluskid.org/machine-learning/softmax-vs-softmax-loss-numerical-stability/ 卷积神经网络系列之s ...

  6. 【BZOJ】1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场(dfs)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1619 首先不得不说,,题目没看懂.... 原来就是找一个下降的联通块.... 排序后dfs标记即可. ...

  7. PyQt的Layout的比例化分块。

    一. QGridLayout: // 列比 第0列与第1列之比为 1:2 layout2p1 -> setColumnStretch(0, 1); layout2p1 -> setColu ...

  8. thinkPHP中phpexcel的导出功能

    public function wExcel() { vendor("PHPExcel.PHPExcel"); // Create new PHPExcel object $obj ...

  9. connect() failed (111: Connection refused) while connecting to upstream, cli

    php-fpm没有运行 执行如下命令查看是否启动了php-fpm,如果没有则启动你的php-fpm即可 netstat -ant | grep 9000 没有运行为空,有运行显示 tcp 0 0 12 ...

  10. hdu 1198 Farm Irrigation(深搜dfs || 并查集)

    转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm ...