单源最短路径(Dijkstra算法)
来源:互联网 发布:asp.net 微信商城源码 编辑:程序博客网 时间:2024/05/16 15:41
单源最短路径问题,给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径。
可以到达的点填权值 否则为无限大
1.先找出v0到各顶点中的当前未找到最短路径的顶点vi的最短的权值(也就是最短的路径),此时v到vi的最短路径就是该权值 将该点设置为已找到最短路径 如:当前为v0到v1最小 所以v1到v0的最短路径为10 ;之后 再次寻找时就是v3最小了。
2.找到v0的当前最小路径的顶点vi,在寻找从vi到各个顶点的路径只和,是否小于从v0到该顶点的路径,若小于 则更新v0到该点的距离,否则继续寻找。
3.回到第一步 重复 直到计算到所有点都找到最短路径(最多循环n-1次)
运行结果:从0出发到0的最短距离为:0
从0出发到1的最短距离为:10
从0出发到2的最短距离为:50
从0出发到3的最短距离为:30
从0出发到4的最短距离为:60
public class Dijkstra_单源最短路径 { static int M=10000;//(此路不通) public static void main(String[] args) { int[][] weight2 = { {M,10,M,30,100}, {M,M,50,M,M}, {M,M,M,M,10}, {M,M,20,M,60}, {M,M,M,M,M} }; int start=0; int[] shortPath = Dijsktra(weight2,start); for(int i = 0;i < shortPath.length;i++) System.out.println("从"+start+"出发到"+i+"的最短距离为:"+shortPath[i]); } public static int[] Dijsktra(int[][] weight,int start){ int n=weight.length; int sp[]=new int[n];//记录最短路径长度 boolean can[]=new boolean[n];//判断是否找到最短路径 can[start]=true; for(int a=1;a<n;a++){ int k=0; int min=Integer.MAX_VALUE; for(int i=0;i<n;i++){ //找到当前最短路径 if(!can[i]&&weight[start][i]<min){ min=weight[start][i]; k=i; } } sp[k]=min; can[k]=true; for(int i=0;i<n;i++){ //以该顶点为中间点,更新数据 if(!can[i]&&min+weight[k][i]<weight[start][i]){ weight[start][i]=weight[k][i]+min; } } } return sp; }}
阅读全文
0 0
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(Dijkstra算法)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- DijKstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(dijkstra算法)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(Dijkstra)算法
- Dijkstra算法(单源最短路径)
- js面试题:let、var
- 关于字符数组的一个小问题
- 实现共享内存
- bootstrap table 插件一直加载中。。。。解决方案
- 【设计模式】—— 迭代模式Iterator
- 单源最短路径(Dijkstra算法)
- 数字在排序数组中出现的次数(java版)
- 如何不利用一个额外的变量来达到交换两个变量值的目的-------位上的异或运算
- Spark on YARN
- 【动态规划】Leetcode编程题解:338. Counting Bits
- B
- DNS
- Spring SpEL系列一 基础用法
- 迭代思想要义