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. Linux - 用户管理常用命令

    1.查看Linux已经存在的用户: [root@CMCC_91 ~]# cut -d : -f 1 /etc/passwd [root@CMCC_91 ~]# cat /etc/passwd |awk ...

  2. [android] AndroidManifest.xml - 【 manifest -> application】

    语法: <application android:allowTaskReparenting=["true" | "false"] android:back ...

  3. ubuntu16.04 安装opencv3.2.0以及opencv_contrib-3.2.0

    1.需要的包:sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config l ...

  4. 【BZOJ】1072: [SCOI2007]排列perm(状压dp+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1072 首先无限膜拜题解orz表示只会暴力orz 数据那么小我竟然想不到状压! orz 这种题可以取模 ...

  5. jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法

    本文实例讲述了jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法.分享给大家供大家参考.具体实现方法如下: 这里主要通过val方法设置按钮的文字,并用attr方法修改disabled属性实 ...

  6. JSON.parse() 和 JSON.stringify() 的区别

    JSON.parse()与JSON.stringify()的区别   JSON.parse()[从一个字符串中解析出json对象] //定义一个字符串 var data='{"name&qu ...

  7. windows性能监视器的使用

    https://blog.csdn.net/ab7434588/article/details/53023799 一般在客户端通过LoadRunner对服务器进行压力测试,都需要实时监控服务器端的系统 ...

  8. laravel 配置修改及读取

    1)laravel 的所以配置文件都在根目录下的 config 目录里,直接看一个配置文件的名字就知道是做什么的了,这里不说了 2)读取配置的方法 $value = config('app.timez ...

  9. Egret微端 创建项目(一)

    开发环境: window7 egret engine:5.0.14 egret wing:4.1.0 微端:v0.0.14 官方教程:http://developer.egret.com/cn/git ...

  10. ubuntu中vi编辑器键盘错乱的问题

    Ubuntu安装完成后vi编辑器键盘不能正常使用,使用下面方法解决: 编辑文件/etc/vim/vimrc.tiny,将“compatible”改成“nocompatible”非兼容模式: 并添加一句 ...