什么是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;
}
}
}
}
}