/// <summary> /// 将顶点v添加到最小生成树中,并且更新数据 /// </summary> /// <param name="g"></param> /// <param name="v"></param> private void visit(EdgeWeightedGraph g, int v) { // 把顶点v添加到最小生成树中, this.markeds[v] = true; // 更新数据 IEnumerator ie = g.adj(v).GetEnumerator(); while (ie.MoveNext()) { Edge e = (Edge)ie.Current; // 获取e边的另一个顶点(当前顶点v) int w = e.other(v); // 判断另一个顶点是不是已经在树中,如果在树中,则不作处理,否则更新数据 if (this.markeds[w]) { continue; } // 判断边e的权重是否小于从w顶点到树中已存在最小边的权重 if (e.weight() < this.distTo[w]) { // 更新数据 this.edgeTo[w] = e; this.distTo[w] = e.weight(); if (pq.contains(w)) { this.pq.changeItem(w, e.weight()); } else { this.pq.insert(w, e.weight()); } } } }