def __init__(self, graph): """The algorithm initialization.""" if graph.is_directed(): raise ValueError("the graph is directed") self.graph = graph self.hamiltonian_cycle = list() self._uf = UnionFind() self._pq = PriorityQueue()
def __init__(self, graph): """The algorithm initialization.""" if graph.is_directed(): raise ValueError("the graph is directed") self.graph = graph self.hamiltonian_cycle = self.graph.__class__(self.graph.v()) for node in self.graph.iternodes(): self.hamiltonian_cycle.add_node(node) self._uf = UnionFind() self._pq = PriorityQueue()
def __init__(self, graph): """The algorithm initialization. Parameters ---------- graph : undirected weighted graph or multigraph """ if graph.is_directed(): raise ValueError("the graph is directed") self.graph = graph self.mst = self.graph.__class__(self.graph.v()) for node in self.graph.iternodes(): # isolated nodes are possible self.mst.add_node(node) self._uf = UnionFind()
def test_unionfind(self): algorithm = UnionFind() for node in range(10): algorithm.create(node) pairs = [(0, 1), (2, 3), (4, 5), (6, 7), (8, 9), (3, 1)] for a, b in pairs: algorithm.union(a, b) self.assertTrue(algorithm.find(1) == algorithm.find(2)) self.assertTrue(algorithm.find(7) != algorithm.find(9)) pairs = [(7, 5), (3, 7), (8, 7)] for a, b in pairs: algorithm.union(a, b) self.assertTrue(algorithm.find(0) == algorithm.find(6)) self.assertTrue(algorithm.find(1) == algorithm.find(9))