📄 dijkstragraphspt.java
字号:
package twf.weightedgraph.shortestpath;
import twf.adt.DoublePQi;
import twf.weightedgraph.AdjList;
import twf.weightedgraph.Edge;
import twf.weightedgraph.Graph;
import twf.weightedgraph.Path;
public class DijkstraGraphSPT {
private double[] wt;
private Edge[] spt;
private int s;
public DijkstraGraphSPT(Graph G, int s)
{ this.s = s;
int V = G.V();
wt = new double[V]; spt = new Edge[V];
double maxWT = V;
for (int v = 0; v < V; v++) wt[v] = maxWT ;
DoublePQi pQ = new DoublePQi(V, wt);
for (int v = 0; v < V; v++) pQ.insert(v);
wt[s] = 0.0; pQ.lower(s);
while (!pQ.empty())
{ int v = pQ.getmin(); // wt[v] = 0.0;
if (v != s && spt[v] == null) return;
AdjList A = G.getAdjList(v);
for (Edge e = A.beg(); !A.end(); e = A.nxt())
{ int w = e.other(v);
double P = wt[v] + e.wt();
if (P < wt[w])
{ wt[w] = P; pQ.lower(w); spt[w] = e; }
}
}
}
public Edge pathR(int v) { return spt[v]; }
public double dist(int v) { return wt[v]; }
public Path path(int v) {
Edge e;
if ((e = pathR(v)) == null) return null;
Path p = new Path(e, null);
while (v != s) {
v = e.other(v);
e = pathR(v);
p = new Path(e, p);
}
return p;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -