private void Visit(int i)
 {
     distTo[i] = 0;
     ipq.Insert(i, distTo[i]);
     while (!ipq.IsEmpty())
     {
         int j = ipq.DeleteMin();
         Proccess(j);
     }
 }
Пример #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);
        }