Warning

This documents an unmaintained version of NetworkX. Please upgrade to a maintained version and see the current NetworkX documentation.

# Source code for networkx.algorithms.dominating

# -*- coding: utf-8 -*-
import networkx as nx
__author__ = '\n'.join(['Jordi Torrents <jtorrents@milnou.net>'])
__all__ = [ 'dominating_set', 'is_dominating_set']

[docs]def dominating_set(G, start_with=None):
r"""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.

--------
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

"""
all_nodes = set(G)
if start_with is None:
v = set(G).pop() # pick a node
else:
if start_with not in G:
raise nx.NetworkXError('node %s not in G' % start_with)
v = start_with
D = set([v])
ND = set(G[v])
other = all_nodes - ND - D
while other:
w = other.pop()
ND.update([nbr for nbr in G[w] if nbr not in D])
other = all_nodes - ND - D
return D

[docs]def is_dominating_set(G, nbunch):
r"""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

--------
dominating_set

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

"""
testset = set(n for n in nbunch if n in G)
nbrs = set()
for n in testset:
nbrs.update(G[n])
if len(set(G) - testset - nbrs) > 0:
return False
else:
return True