Esempio n. 1
0
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())