您的位置:首页 > 编程语言 > Java开发

Dijkstra——Java实现

2016-06-23 16:39 246 查看
dijkstra算法是求最短路径的经典算法,只求无负权路径,属于贪心策略,贪最短路径。本人郑重声明:算法是来自《算法导论》,代码是自己写的,有的地方处理的不好,但可以实现,本人用的是eclipse。

public class Dijkstra {
private static int x=1111111;
public static void main(String args[]){
int[][] Matrix={
{x,10,3,x,x},
{x,x,1,2,x},
{x,4,x,8,2},
{x,x,x,x,7},
{x,x,x,9,x}};
DD(Matrix,0);
}
public static int extractmin(char[] H,int[] N){
int tt=1111111;
int hehe=0;
for(int i=0;i<N.length;i++){
if(H[i]!='0')
if(N[i]<tt){
tt=N[i];
hehe=i;
}
}
return hehe;
}
public static void DD(int[][] G,int s){
int[] d=new int[5];//记录路径长度
for(int i=0;i<d.length;i++)
d[i]=x;
d[s]=0;
char[] S={'0','0','0','0','0'};//起点
char[] Q={'A','B','C','D','E'};//终点
char[] W={'A','B','C','D','E'};//所有点的集合
int q=Q.length;
int i=0;
while(q>0){
S[i]=Q[extractmin(Q,d)];
System.out.print(S[i]+" ");
System.out.println();
i++;
Q[extractmin(Q,d)]='0';
q--;
for(int k=0;k<d.length;k++){
if(Q[k]!='0'){//只有已划分到Q中的端点可做终点点
for(int j=0;j<d.length;j++){
//只有已划分到S中的端点可做起点点
int yy=0;
for(int l=0;l<d.length;l++){
if(S[l]==W[j])
yy=1;}
//连通且起点在S中
if(G[j][k]!=x&&yy==1)
if(d[j]+G[j][k]<d[k])
d[k]=d[j]+G[j][k];
}
}
}
for(int h=0;h<d.length;h++){
if(Q[h]!='0')
System.out.print(d[h]+" ");
}
System.out.println();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息