private void Proccess(int j) { visited[j] = true; for (int i = 0; i < V; ++i) { if (visited[i]) { continue; } double edgeCost = Util.CalculateEdgeValue(j, i); if (edgeCost < distTo[i]) { distTo[i] = edgeCost; edgeTo[i] = new Edge(edgeCost, j, i); if (ipq.Contains(i)) { ipq.DecreaseKey(i, distTo[i]); } else { ipq.Insert(i, distTo[i]); } } } }
public double GetMst() { double Sum = 0; IndexedPQ.Insert(0, 0); while (!IndexedPQ.IsEmpty()) { int j = IndexedPQ.DeleteMin(); minimumindex = j; Visited[j] = true; for (int v = 0; v < NumOfVertices; ++v) { if (Visited[v]) { continue; } double edgeWeight = MathUtilities.GetDistance(j, v); if (edgeWeight < Destination[v]) { Destination[v] = edgeWeight; Nodes[v] = minimumindex; Edge_To[v] = new Edge(edgeWeight, j, v); if (IndexedPQ.Contains(v)) { IndexedPQ.DecreaseKey(v, Destination[v]); } else { IndexedPQ.Insert(v, Destination[v]); } } } } for (int i = 0; i < Edge_To.Count(); ++i) { Sum += Edge_To[i].Weight; } return(Sum); }