code: def 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.
  
      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))
  
  
      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.
      """
      for c in nx.connected_components(G):
          yield from connected_cuthill_mckee_ordering(
              G.subgraph(c), heuristic
          )
  
file_path: networkx/networkx/utils/rcm.py
imports: from collections import deque
  from operator import itemgetter
  import networkx
  from ..utils import arbitrary_element
label_desc: Use image node_id 1 for calling a global function with example usage: cuthill_mckee_ordering(G, heuristic) without return types