Exemple #1
0
        public AdjVertexSortedList Union(AdjVertexSortedList list2Union, DisjointSet dsu)
        {
            var unionList = new AdjVertexSortedList();

            while (!this.IsEmpty && !list2Union.IsEmpty)
            {
                if (dsu.InTheSameSet(this.MaxWeightEdge.V1Id, this.MaxWeightEdge.V2Id))
                {
                    this.ExtractMaxWeightEdge();
                }
                //Удаляем из текущего списка ребра,
                //у которых обе вершины входят в одну компоненту связности
                else if (dsu.InTheSameSet(
                             list2Union.MaxWeightEdge.V1Id, list2Union.MaxWeightEdge.V2Id))
                {
                    list2Union.ExtractMaxWeightEdge();
                    //Удаляем из списка для объединения ребра,
                    //у которых обе вершины входят в одну компоненту связности
                }
                else if (this.MaxWeightNode > list2Union.MaxWeightNode)
                {
                    unionList.Add(this.ExtractMaxWeightEdge());
                }
                else
                {
                    unionList.Add(list2Union.ExtractMaxWeightEdge());
                }
            }
            while (!this.IsEmpty)
            {
                if (dsu.InTheSameSet(this.MaxWeightEdge.V1Id, this.MaxWeightEdge.V2Id))
                {
                    this.ExtractMaxWeightEdge();
                }
                else
                {
                    unionList.Add(this.ExtractMaxWeightEdge());
                }
            }
            while (!list2Union.IsEmpty)
            {
                if (dsu.InTheSameSet(list2Union.MaxWeightEdge.V1Id, list2Union.MaxWeightEdge.V2Id))
                {
                    list2Union.ExtractMaxWeightEdge();
                }
                else
                {
                    unionList.Add(list2Union.ExtractMaxWeightEdge());
                }
            }
            return(unionList);
        }
Exemple #2
0
        public AdjVertexSortedList Union(AdjVertexSortedList list2Union, bool[] isIncluded)
        {
            var unionList = new AdjVertexSortedList();

            while (!this.IsEmpty && !list2Union.IsEmpty)
            {
                if (isIncluded[this.MaxWeightNode.AdjVertexID])
                {
                    this.ExtractMaxWeightEdge();
                }
                //Удаляем из текущего списка ребра,
                //у которых обе вершины входят в текущую компоненту связности
                else if (isIncluded[list2Union.MaxWeightNode.AdjVertexID])
                {
                    list2Union.ExtractMaxWeightEdge();
                }
                //Удаляем из списка для объединения ребра,
                //у которых обе вершины входят в текущую компоненту связности
                else if (this.MaxWeightNode > list2Union.MaxWeightNode)
                {
                    unionList.Add(this.ExtractMaxWeightEdge());
                }
                else
                {
                    unionList.Add(list2Union.ExtractMaxWeightEdge());
                }
            }
            while (!this.IsEmpty)
            {
                if (isIncluded[this.MaxWeightNode.AdjVertexID])
                {
                    this.ExtractMaxWeightEdge();
                }
                else
                {
                    unionList.Add(this.ExtractMaxWeightEdge());
                }
            }
            while (!list2Union.IsEmpty)
            {
                if (isIncluded[list2Union.MaxWeightNode.AdjVertexID])
                {
                    list2Union.ExtractMaxWeightEdge();
                }
                else
                {
                    unionList.Add(list2Union.ExtractMaxWeightEdge());
                }
            }
            return(unionList);
        }