4.19

Java的迪杰斯特拉算法

public static int Di(int [][]G,int v0,int v1) {//G为二维数组,v0是起始点,v1是终点

int n=G.length;
boolean S[]=new boolean[n];//收集起点到目标点是否可通
int D[]=new int[n];//存放到目标点距离
int path[]=new int[n];//存放目标点到起点的经过前驱
int v=0;
for(v=0;v<n;v++) {
S[v]=false;
D[v]=G[v0][v];
if(D[v]<top){
path[v]=0;
}
else {
path[v]=-1;
}
}
S[v0]=true;
D[v0]=0;
//以上初始化完成接下来开始计算数据
v=0;
for(int i=1;i<n;i++) {
int min=top;
for(int w=0;w<n;w++) {
if(!S[w]&&D[w]<min) {
v=w;
min=D[w];
}
}
S[v]=true;
for(int w=0;w<n;w++) {
if(!S[w]&&(D[v]+G[v][w]<D[w])) {
D[w]=D[v]+G[v][w];
path[w]=v;
}
}
}
return D[v1-1];
}

posted @ 2024-04-19 22:10  catsahsy  阅读(4)  评论(0编辑  收藏  举报