Skip to main content
`Ctrl`+`K`

# cuthill_mckee_ordering

cuthill_mckee_ordering(G, heuristic=None)

  Generate an ordering (permutation) of the graph nodes to make a sparse matrix.

  Uses the Cuthill-McKee heuristic (based on breadth-first search) [1].

  Parameters:
    G graph

      A NetworkX graph

    heuristic function, optional

      Function to choose starting node for RCM algorithm. If None a node from a pseudo-peripheral pair is used. A user-defined function can be supplied that takes a graph object and returns a single node.

  Returns:
    nodes generator

      Generator of nodes in Cuthill-McKee ordering.

  See also

  `reverse_cuthill_mckee_ordering`

  Notes

  The optimal solution the bandwidth reduction is NP-complete [2].

  References

  [1]

  E. Cuthill and J. McKee. Reducing the bandwidth of sparse symmetric matrices, In Proc. 24th Nat. Conf. ACM, pages 157-172, 1969. http://doi.acm.org/10.1145/800195.805928

  [2]

  Steven S. Skiena. 1997. The Algorithm Design Manual. Springer-Verlag New York, Inc., New York, NY, USA.

  Examples

      >>> from networkx.utils import cuthill_mckee_ordering
      >>> G = nx.path_graph(4)
      >>> rcm = list(cuthill_mckee_ordering(G))
      >>> A = nx.adjacency_matrix(G, nodelist=rcm)

  Smallest degree node as heuristic function:

      >>> def smallest_degree(G):
      ...     return min(G, key=G.degree)
      >>> rcm = list(cuthill_mckee_ordering(G, heuristic=smallest_degree))