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; } }
Dijkstra——最短路徑(鄰接表法)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.