⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dijkstragraphspt.java

📁 个人学习图算法时写的源码 包括最小生成树, 最大网络流, DSF遍历, BSF遍历,
💻 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 + -