/// <summary> /// Zwraca kolejkę krawędzi, oznaczonych numeracją grafu oryginalnego /// </summary> static EdgesMaxPriorityQueue getGraphEdges(PartGraph partGraph) { var graph = partGraph.Graph; EdgesMaxPriorityQueue edges = new EdgesMaxPriorityQueue(); int verticesCount = graph.VerticesCount; for (int i = 0; i < verticesCount; i++) { for (int j = 0; j < i; j++) { if (!double.IsNaN(graph.GetEdgeWeight(i, j))) { edges.Put(new Edge(partGraph.NumbersInOriginal[i], partGraph.NumbersInOriginal[j], graph.GetEdgeWeight(i, j))); } } } return(edges); }
/// <summary> /// Dzieli zbiór krawędzi na dwa podzbiory /// A - waga wieksza lub równa niż w B /// </summary> static (HashSet <Edge>, HashSet <Edge>) setAandB(EdgesMaxPriorityQueue edges) { // A - waga wieksza lub równa niż w B HashSet <Edge> A = new HashSet <Edge>(); HashSet <Edge> B = new HashSet <Edge>(); int numEdges = edges.Count; for (int i = 0; i < numEdges; i++) { if (i < numEdges / 2) { A.Add(edges.Get()); } else { B.Add(edges.Get()); } } return(A, B); }