+
    �°³j
  ã                   ób   € R t ^ RIHt ^ RIHt ^ RIt^RIHt RR.t	RR lt
RR ltRR	 ltR
 tR# )zB
Cuthill-McKee ordering of graph nodes to produce sparse matrices
)Údeque)Ú
itemgetterN)Úarbitrary_elementÚcuthill_mckee_orderingÚreverse_cuthill_mckee_orderingc              #  ó’   "  € \         P                  ! V 4       F&  p\        V P                  V4      V4       Rj  x€L
  K(  	  R#  L
5i)aA  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.
N)ÚnxÚconnected_componentsÚ connected_cuthill_mckee_orderingÚsubgraph)ÚGÚ	heuristicÚcs   && ÚS/home/luca/screen-checking/.venv/lib/python3.14/site-packages/networkx/utils/rcm.pyr   r      s8   é € ôj ×$Ò$ QÖ'ˆÜ3°A·J±J¸q³MÀ9ÓM×MÒMó (ÙMùs   ‚8AºA»Ac           	     ó>   € \        \        \        WR7      4      4      # )a_  Generate an ordering (permutation) of the graph nodes to make
a sparse matrix.

Uses the reverse 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 reverse Cuthill-McKee ordering.

Examples
--------
>>> from networkx.utils import reverse_cuthill_mckee_ordering
>>> G = nx.path_graph(4)
>>> rcm = list(reverse_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(reverse_cuthill_mckee_ordering(G, heuristic=smallest_degree))


See Also
--------
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-72, 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.
)r   )ÚreversedÚlistr   )r   r   s   &&r   r   r   H   s   € ôj ”DÔ/°ÔGÓHÓIÐIó    c              #   óˆ  "  € Vf   \        V 4      pMV! V 4      pV0p\        V.4      pV'       d‰   VP                  4       pVx € \        V P	                  \        W,          4      V,
          4      \        ^4      R7      pV UUu. uF  w  rxVNK	  	  p	ppVP                  V	4       VP                  V	4       K�  R # u uppi 5i)N©Úkey)	Úpseudo_peripheral_noder   ÚpopleftÚsortedÚdegreeÚsetr   ÚupdateÚextend)
r   r   ÚstartÚvisitedÚqueueÚparentÚndÚnÚdÚchildrens
   &&        r   r
   r
   €   sŸ   é € àÒÜ& qÓ)‰á˜!“ˆØˆg€GÜ�5�'‹N€Eß
Ø—‘“ˆØŠÜ�A—H‘HœS ¥›^¨gÕ5Ó6¼JÀq»MÔJˆÙ"$Ô%¡"™$˜!“A¡"ˆÑ%Ø�‰�xÔ Ø�‰�XÖñ ùó &ùs   ‚/C²ACÂB<Â/Cc                 ó   a€ \        V 4      p^ pTp \        P                  ! W4      p\        VP	                  4       4      oSV8:  d    V# SpV3R lVP                  4        4       p\        V P                  V4      \        ^4      R7      w  r6K  )é    c              3   ó>   <"  € T F  w  rVS8X  g   K  Vx € K  	  R # 5i©N© )Ú.0r#   ÚdistÚls   &  €r   Ú	<genexpr>Ú)pseudo_peripheral_node.<locals>.<genexpr>�   s   øé € Ð>¡[™'˜!°D¸A±I—A’A£[ùs   ƒ“
r   )	r   r   Úshortest_path_lengthÚmaxÚvaluesÚitemsÚminr   r   )r   ÚuÚlpÚvÚsplÚfarthestÚdegr-   s   &      @r   r   r   ‘   s�   ø€ ô 	˜!Ó€AØ	
€BØ	€AØ
Ü×%Ò% aÓ+ˆÜ�—
‘
“ÓˆØ�Œ7Øð €Hð ˆÜ> S§Y¡Y¤[Ó>ˆÜ�Q—X‘X˜hÓ'¬Z¸«]Ô;‰ˆ‰3r   r)   )Ú__doc__Úcollectionsr   Úoperatorr   Únetworkxr   Úutilsr   Ú__all__r   r   r
   r   r*   r   r   Ú<module>rA      s;   ðñõ Ý ã å %à#Ð%EÐ
F€ô6Nôr5Jôpô"r   