class HamiltonChecker: def __init__(self, graph): self.hamiltonian_flag = False self.graph = graph self.visited = [False]*(len(graph.graph_representation)+1) self.stack = Stack() self.hamiltonianPath = [] def check_hamilton(self, vertex): if not self.hamiltonian_flag: self.stack.push(vertex) if self.stack.size() < len(self.graph.graph_representation): self.visited[vertex] = True for neighbour in self.graph.graph_representation[vertex]: if self.visited[neighbour] == False: self.check_hamilton(neighbour) self.visited[vertex] = False else: self.hamiltonian_flag = True if self.stack.bottom() in self.graph.graph_representation[vertex]: is_hamiltonian_cycle = True self.stack.push(self.stack.bottom()) self.hamiltonianPath = self.stack.getListFromStack() self.stack.pop() def reset(self): self.hamiltonian_flag = False self.visited = [False]*len(graph.graph_representation) self.stack = Stack() self.hamiltonianPath = [] def is_hamiltionian(self): return {self.hamiltonian_flag : self.hamiltonianPath}
def main(): stack = Stack() stack.add("Mon") stack.add("Tue") print(stack.peek()) print(stack.bottom()) print(stack.size()) print("\n") stack.add("Wed") stack.add("Thu") print(stack.peek()) print(stack.bottom()) print(stack.size()) print("\n") stack.remove() print(stack.peek()) print(stack.bottom()) print(stack.size())