def main(): argc = len(sys.argv) if sys.argv[1] == '-s' and argc == 3: estado = sys.argv[2] suc = sucessor(estado) str = '' for i in suc: str += '(' i = ','.join(i) str += i str += ') ' str.rstrip() print(str) elif sys.argv[1] == '-e' and argc == 4: ini_state = sys.argv[2] ini_cost = sys.argv[3] ini_node = Node(estado=ini_state, custo=ini_cost) new_node = expande(ini_node) print(*new_node) elif sys.argv[1] == '-r' and argc == 4: ini_state = sys.argv[3] ini_node = Node(estado=ini_state) if sys.argv[2] == '-bfs': print(*bfs(ini_node)) elif sys.argv[2] == '-dfs': print(*dfs(ini_node)) elif sys.argv[2] == '-as1': print(*astarHamming(ini_node)) elif sys.argv[2] == '-as2': print(*astarManhattan(ini_node))
def dfs(nodo): num_exp = 0 explorados = [] fronteira = [nodo] while True: if not fronteira: return [] actual = fronteira.pop() if actual.estado == '12345678_': print(num_exp, actual.custo) return backtrace(actual) if actual.estado not in explorados: explorados.append(actual.estado) for item in expande(actual): num_exp += 1 item.custo = actual.custo + 1 fronteira.append(item)
def astarManhattan(nodo): num_exp = 0 explorados = [] fronteira = PriorityQueue() initial = PriorityNode(manhattan(nodo), nodo) fronteira.put(initial) while True: if not fronteira: return [] actual = fronteira.get() actual = actual.item if actual.estado == '12345678_': print(num_exp, actual.custo) return backtrace(actual) if actual.estado not in explorados: explorados.append(actual.estado) for item in expande(actual): num_exp += 1 item.custo = actual.custo + 1 priority = manhattan(item) + item.custo new_item = PriorityNode(priority, item) fronteira.put(new_item)