算法介绍:Dijkstra算法

什么是Dijkstra算法 ?
Dijkstra算法指的是:计算某一点到其余各个点之间的最短距离,该算法主要试用于边距离为正数的请况。
Dijkstra算法介绍

Dijkstra算法:把图里面的点分成两个集合,S,V,S这个集合里面是已经确认到你想要求的点(这里假设为A点)的最短路径的长度,算法刚开始S里面只有A点,然后计算A到各个点的距离,取最短路径,把该点(B),加入到S集合中,然后计算A到各个点以B为中间桥梁(A-B-X)这个距离和之前A-X距离比较,小于则更新距离,然后取这一组的最小值,又把该点加入(假设为C点),然后再以A-B-C-X这种方法更新距离,加入新的点,直到所有的点加入到S集合中,就查找完毕
下面是图形解释:
这里写图片描述

假设用Dijkstra算A点

这里写图片描述
下面贴一下java实现的
这里写代码片
import java.lang.invoke.ConstantCallSite;
public class dijkstra {
int number =10;
int max=32767;
int[] dist =new int[number];//集合代表最短距离
int[] pre =new int[number];
int[][] A=new int[number][number];//0开始
public static void main(String[] args) {
// TODO Auto-generated method stub
}
private void disktra(int[][] data,int key){
boolean[] is=new boolean[number];
for(int i=0;i<number;i++){
dist[i]=data[0][i];
if(data[key][i]==max)pre[i]=-1;
else{
pre[i]=key; //先初始化
}
}
is[key]=true;
dist[key]=0;
for(int g=1;g<number;g++){
int min=max;
int n=0;
//找出距离key点最短距离的点
for(int j=0;j<number;j++){
if(!is[j]&&dist[j]<max){
min=dist[j];
n=j;
}
}
is[n]=true;
//更新一下,以这个点为中间桥梁各点到key点的距离
for(int k=0;k<number;k++){
if(!is[k]&&dist[n]+data[n][k]<data[key][k]){
dist[k]=dist[n]+data[n][k];
pre[k]=n;
}
}
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值