首页 > 编程语言 > 详细

Dijkstra算法

时间:2017-04-08 20:45:57      阅读:178      评论:0      收藏:0      [点我收藏+]
技术分享
public class Dijkstra {
    static int maxint=1000;
    public static void Dijkstra(int n,int v,int dist[],int c[][],int prev[]){
        boolean s[]=new boolean[n];
        for(int i=0;i<n;i++){
            dist[i]=c[v][i];
            s[i]=false;
            if(dist[i]==maxint)prev[i]=-1;
            else prev[i]=v;
    }
        s[v]=true;
        for(int i=0;i<n;i++){
            int temp=maxint;
            int u=v;
            for(int j=0;j<n;j++){
                if(dist[j]<temp&&!s[j]){
                    temp=dist[j];
                    u=j;
                }
            }
            s[u]=true;
            for(int j=0;j<n;j++){
                if(!s[j]){
                    dist[j]=(dist[u]+c[u][j])<dist[j]?dist[u]+c[u][j]:dist[j];
                    prev[j]=u;
                }
            }
        }
}
    public static void print(int n,int v,int dist[],int prev[]){
        int f[]=new int[n];
        for(int i=0;i<n;i++)
            if(i!=v){
                int start=n-2;
                int k=i;
                f[n-1]=i;
                while(prev[k]!=v){
                    f[start--]=prev[k];
                    k=prev[k];
                }
                f[start]=v;
             System.out.print("从城市"+v+"——城市"+i+"的最短路径为:");
             for(int j=start;j<n;j++)
                 System.out.print(f[j]+"——");
             System.out.print("距离为:"+dist[i]);
             System.out.println();
            }
        
    }
}
View Code

 

Dijkstra算法

原文:http://www.cnblogs.com/nihai/p/6682873.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!