Calculates the minimum spanning forest of a disconnected graph.
    Returns a list of lists, each containing the edges that define that tree.
    Returns an empty list for an empty graph.

def find_minimum_spanning_forest(graph):
    """Calculates the minimum spanning forest of a disconnected graph.
    Returns a list of lists, each containing the edges that define that tree.
    Returns an empty list for an empty graph.
    """
    msf = []

    if graph.num_nodes() == 0:
        return msf
    if graph.num_edges() == 0:
        return msf

    connected_components = get_connected_components_as_subgraphs(graph)
    for subgraph in connected_components:
        edge_list = kruskal_mst(subgraph)
        msf.append(edge_list)

    return msf