def search_solution_UCS(connections, init_state, solution): solved = False visited_nodes = [] frontier_nodes = [] init_node = Node(init_state) init_node.set_cost(0) frontier_nodes.append(init_node) while (not solved) and len(frontier_nodes) != 0: # Ordenar lista de nodos frontera frontier_nodes = sorted(frontier_nodes, key=Compare) node = frontier_nodes[0] # Extraer nodo y añadirlo a visitados visited_nodes.append(frontier_nodes.pop(0)) if node.get_data() == solution: # Solucion encontrada solved = True return node else: # Expandir nodos hijo (ciudades con conexion) node_data = node.get_data() child_list = [] for achild in connections[node_data]: child = Node(achild) cost = connections[node_data][achild] child.set_cost(node.get_cost() + cost) child_list.append(child) if not child.on_list(visited_nodes): # Si está en la lista lo sustituimos con el nuevo valor de coste si es menor if child.on_list(frontier_nodes): for n in frontier_nodes: if n.equal( child) and n.get_cost() > child.get_cost(): frontier_nodes.remove(n) frontier_nodes.append(child) else: frontier_nodes.append(child) node.set_child(child_list)