def busqueda_recursiva(nodo, solucion, visitados, limite): nodo_visitado = nodo.get_datos() visitados.append(nodo_visitado) if nodo.get_datos() == solucion: return nodo else: # Expandir nodos hijo dato_nodo = nodo.get_datos() lista_hijos = [] for un_hijo in conexiones[dato_nodo]: hijo = Nodo(un_hijo) if not hijo.get_datos() in visitados: lista_hijos.append(hijo) nodo.set_hijos(lista_hijos) for nodo_hijo in nodo.get_hijos(): if not nodo_hijo.get_datos() in visitados: # llamada recursiva sol = busqueda_recursiva(nodo_hijo, solucion, visitados, limite) if sol != None: return sol return None
'Madrid': 599 }, 'Santander': { 'Madrid': 437, 'Zaragoza': 394 }, 'Zaragoza': { 'Barcelona': 296, 'Valencia': 309, 'Madrid': 313 }, 'Barcelona': { 'Zaragoza': 296, 'Madrid': 603, 'Valencia': 396 } } estado_inicial = 'Malaga' solucion = 'Santiago' nodo_solucion = search_solution_UCS(conexiones, estado_inicial, solucion) # Mostrar resultado resultado = [] Nodo = nodo_solucion while Nodo.get_padre() is not None: resultado.append(Nodo.get_datos()) Nodo = Nodo.get_padre() resultado.append(estado_inicial) resultado.reverse() print(resultado) print("Coste: %s" % str(nodo_solucion.get_coste()))