Estoy tratando de hacer un 8 puzzle solver del problema el uso de diferentes algoritmos, tales como BFS,DFS, UN* etc. usando python. Para aquellos que no están familiarizados con el problema, de 8 puzzle el problema es un juego que consta de 3 filas y 3 columnas. Puede mover el azulejo vacío sólo horizontalmente o verticalmente, 0 representa el azulejo vacío. Se parece a esto (no pude agregar las imágenes debido a mis cuentas reputación.):
https://miro.medium.com/max/679/1*yekmcvT48y6mB8dIcK967Q.png
initial_state = [0,1,3,4,2,5,7,8,6]
goal_state = [1,2,3,4,5,6,7,8,0]
def find_zero(state):
global loc_of_zero
loc_of_zero = (state.index(0))
def swap_positions(list, pos1, pos2):
first = list.pop(pos1)
second = list.pop(pos2-1)
list.insert(pos1,second)
list.insert(pos2,first)
return list
def find_new_nodes(state):
if loc_of_zero == 0:
right = swap_positions(initial_state,0,1)
left = swap_positions(initial_state,0,3)
return(right,left)
find_zero(initial_state)
print(find_new_nodes(initial_state))
El problema que tengo es este, quiero la función "find_new_nodes(estado)" return 2 listas diferentes, así que puede elegir el más prometedor nodo, dependiendo del algoritmo) y así sucesivamente. Pero la salida de mi código consta de dos idénticos listas.
Este es mi resultado: ([4, 0, 3, 1, 2, 5, 7, 8, 6], [4, 0, 3, 1, 2, 5, 7, 8, 6])
¿Qué puedo hacer para hacerla volver 2 listas diferentes? Mi objetivo es devolver todos los movimientos posibles, dependiendo de donde el 0 es decir, con el find_new_nodes función. Disculpas si esto es una pregunta fácil, Esta es mi primera vez haciendo un proyecto de este complicado.