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]);
             }
         }
     }
 }
Пример #2
0
        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);
        }