【发布时间】:2021-11-22 12:52:37
【问题描述】:
我正在尝试使用 python 使用不同的算法(例如 BFS、DFS、A* 等)制作一个 8 拼图问题求解器。对于不熟悉这个问题的人来说,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(state)”返回2个不同的列表,所以我可以选择最有希望的节点,具体取决于算法)等等。但是我的代码输出包含两个相同的列表。
这是我的输出: ([4, 0, 3, 1, 2, 5, 7, 8, 6], [4, 0, 3, 1, 2, 5, 7, 8, 6])
我该怎么做才能让它返回 2 个不同的列表?我的目标是使用 find_new_nodes 函数根据 0 的位置返回所有可能的移动。抱歉,如果这是一个简单的问题,这是我第一次让项目变得如此复杂。
【问题讨论】:
标签: python algorithm artificial-intelligence