Я пытаюсь создать решатель задач из 8 головоломок, используя различные алгоритмы,такие как BFS, DFS, A* и т.д., Используя python. Для тех, кто не знаком с проблемой, 8 задач-головоломок-это игра, состоящая из 3 строк и 3 столбцов. Вы можете перемещать пустую плитку только по горизонтали или вертикали, 0 представляет пустую плитку. Это выглядит так (я не смог добавить изображения из-за репутации моих аккаунтов).:
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))
Проблема у меня такая, я хочу, чтобы функция "find_new_nodes(состояние)" возвращала 2 разных списка, чтобы я мог выбрать наиболее перспективный узел, в зависимости от алгоритма) и так далее. Но вывод моего кода состоит из двух одинаковых списков.
Это мой результат: ([4, 0, 3, 1, 2, 5, 7, 8, 6], [4, 0, 3, 1, 2, 5, 7, 8, 6])
Что я могу сделать, чтобы он вернул 2 разных списка? Моя цель-вернуть все возможные ходы в зависимости от того, где находится 0, используя функцию find_new_nodes. Извините, если это простой вопрос, но я впервые делаю проект таким сложным.