def __init__(self, points, edges, n, d):
        assert points.n == n
        assert points.d == d
        self.point_set = points
        self.edges = edges
        self.n = n
        self.d = d

        self.solution = factories.create_solution_edges(n)
        self.connected_components = ConnectedComponents(n)

        self.lines = []

        self.lines_registry = {}
        self.line_segments = {}
    def compute_spanning_tree_on_ccs(self):
        new_solution_edges = set()
        remaining_points = range(self.n)
        while remaining_points:
            p = remaining_points.pop()
            spanning_tree_edges = self.spanning_tree(p)
            new_solution_edges.update(spanning_tree_edges)
            # TODO maybe use bfs with ccs instead to delete from remain.points
            for (i, j) in spanning_tree_edges:
                if i in remaining_points:
                    remaining_points.remove(i)
                if j in remaining_points:
                    remaining_points.remove(j)

        self.solution = factories.create_solution_edges(self.n)
        for (i, j) in new_solution_edges:
            self.solution.update(i, j, True)
        return