public class Demo {
public static void main(String[] args) {
int[][] graph=new int[][]{{65535,65535,10,65535,30,100},
{65535,5,65535,65535,65535,65535},
{65535,65535,65535,50,65535,65535},
{65535,65535,65535,65535,65535,10},
{65535,65535,65535,20,65535,60},
{65535,65535,65535,65535,65535,65535}};
int[] d=dijkstra(graph,6);
int k=0;
for(int i:d){
if(k!=0){
System.out.println("第0个点到第"+k+"个点的距离:"+i);
}
k++;
}
}
public static int[] dijkstra(int[][] graph,int n){
int[] d=new int[n];
int[] pre=new int[n];
for(int i=0;i<n;i++){
pre[i]=65535;
}
d[0]=0;
for(int i=1;i<n;i++){
d[i]=graph[0][i];
if(d[i]!=65535){
pre[i]=0;
}
}
for(int i=1;i<n;i++){
for(int j=0;j<n;j++){
if(d[j]+graph[j][i]<d[i]){ //如果满足条件则更新源点到i的距离的d[i]
d[i]=d[j]+graph[j][i];
pre[i]=j; //保存到该点的前一个点
}
}
}
for(int i=1;i<n;i++){ //打印源点0到每个点的通路
System.out.print("第0个点到第"+i+"个点的通路:");
if(d[i]!=65535){
print(d,pre,i);
}else{
System.out.print("没有通路");
}
System.out.println();
}
return d;
}
public static void print(int[] d,int[] pre,int i){ //打印的实现
if(pre[i]!=65535||i==0){
if(i!=0)
print(d,pre,pre[i]);
System.out.print("V"+i+" ");
}
}
}
最短路径
最新推荐文章于 2017-03-08 16:42:46 发布