Dijkstra——最短路徑(鄰接表法)

package com.zhang.graph;
import java.util.Vector;
//有向加權圖Dijkstra算法
public class NetWork {
    Vertex start;
    private class Vertex{
        Object object;
        Edge edges;
        Vertex nextVertex;
        boolean done;
        int dist;
        Vertex back;
    }
    private class Edge{
        Vertex to;
        int weight;
        Edge nextEdge;
    }
    public NetWork(){
        if(start!=null){
            start.dist = 0;
            for(Vertex p=start.nextVertex;p!=null;p=p.nextVertex){
                p.dist = Integer.MAX_VALUE;//infinity
            }
        }
    }
    public void findShortestPaths(){
        for(Vertex v=start;v!=null;v=closestVertex()){
            for(Edge e=v.edges; e!=null ;e=e.nextEdge){
                Vertex w = e.to;
                if(!w.done && v.dist+e.weight<w.dist){
                    w.dist = v.dist+e.weight;
                    w.back = v;
                }
            }
            v.done = true;
        }
    }
    private Vertex closestVertex(){
        //return the vertex with minimal dist among those not done
        Vertex v = null;
        int minDist = Integer.MAX_VALUE;
        for(Vertex w=start; w!=null; w=w.nextVertex){
            if(!w.done && w.dist<minDist){
                v = w;
                minDist = w.dist;
            }
        }
        return v;
    }  
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章