ó
|£*^c           @   sC   d  d l  Z d j d g ƒ Z d d g Z d d „ Z d „  Z d S(   iÿÿÿÿNs   
s%   Jordi Torrents <jtorrents@milnou.net>t   dominating_sett   is_dominating_setc   	      C   sê   t  |  ƒ } | d k r- t  |  ƒ j ƒ  } n( | |  k rO t j d | ƒ ‚ n  | } t  | g ƒ } t  |  | ƒ } | | | } xa | rå | j ƒ  } | j | ƒ | j g  |  | D] } | | k rµ | ^ qµ ƒ | | | } q… W| S(   sZ  Finds a dominating set for the graph G.

    A dominating set for a graph `G = (V, E)` is a node subset `D` of `V`
    such that every node not in `D` is adjacent to at least one member
    of `D` [1]_.

    Parameters
    ----------

    G : NetworkX graph

    start_with : Node (default=None)
        Node to use as a starting point for the algorithm.

    Returns
    -------
    D : set
        A dominating set for G.

    Notes
    -----
    This function is an implementation of algorithm 7 in [2]_ which
    finds some dominating set, not necessarily the smallest one.

    See also
    --------
    is_dominating_set

    References
    ----------
    .. [1] http://en.wikipedia.org/wiki/Dominating_set

    .. [2] Abdol-Hossein Esfahanian. Connectivity Algorithms.
        http://www.cse.msu.edu/~cse835/Papers/Graph_connectivity_revised.pdf

    s   node %s not in GN(   t   sett   Nonet   popt   nxt   NetworkXErrort   addt   update(	   t   Gt
   start_witht	   all_nodest   vt   Dt   NDt   othert   wt   nbr(    (    sr   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/algorithms/dominating.pyR       s    %	0c            ss   t  ‡  f d †  | Dƒ ƒ } t  ƒ  } x | D] } | j ˆ  | ƒ q, Wt t  ˆ  ƒ | | ƒ d k rk t St Sd S(   s¶  Checks if nodes in nbunch are a dominating set for G.

    A dominating set for a graph `G = (V, E)` is a node subset `D` of `V`
    such that every node not in `D` is adjacent to at least one member
    of `D` [1]_.

    Parameters
    ----------

    G : NetworkX graph

    nbunch : Node container

    See also
    --------
    dominating_set

    References
    ----------
    .. [1] http://en.wikipedia.org/wiki/Dominating_set

    c         3   s!   |  ] } | ˆ  k r | Vq d  S(   N(    (   t   .0t   n(   R	   (    sr   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/algorithms/dominating.pys	   <genexpr>S   s    i    N(   R   R   t   lent   Falset   True(   R	   t   nbuncht   testsett   nbrsR   (    (   R	   sr   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/algorithms/dominating.pyR   <   s    	 (   t   networkxR   t   joint
   __author__t   __all__R   R    R   (    (    (    sr   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/algorithms/dominating.pyt   <module>   s   6