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 = 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
v = w;
minDist = w.dist;
}
}
return v;
}
}