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); }
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); }