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

 

posted on 2017-04-08 20:11  足迹漫天涯  阅读(135)  评论(0)    收藏  举报