【发布时间】:2019-10-13 18:40:50
【问题描述】:
好吧,自从我在 python 中工作以来已经有很长时间了。但基本上我正在做经典的 8 拼图问题,所以给定一个字符串,例如“12-453786”,我的程序将它解决为所需的“12345678-”。我目前正在使用广度优先搜索来解决它,并在下面的示例中存储访问过的节点和来自的节点。但是,要跟踪完成谜题所需的路径或移动量,我需要能够从已解决的元组开始,并通过我的元组列表追溯到开始状态
我正在考虑做某种 whilesolved != startstate 循环,但这不会完全奏效。
def breadth_first_search(puz):
qu = queue.Queue()
laststate=""
qu.put((puz, laststate))
startstate=puz
visited=[]
#visited[puz] = puz
while queue:
puz = qu.get()
visited.append(puz)
pos = puz[0].index('-')
nebs = neighborcells(pos)
#print(*visited)
if puz[0] == "12345678-":
break
else:
for i in nebs:
swapped=swap(puz,i,pos)
if swapped in visited:
pass #?
else:
qu.put((swapped, puz[0]))
#some sort of linked list like function to get the path of result to start
#here
访问节点示例(元组列表)
[('12-453786', ''),
('1-2453786', '12-453786'),
('12345-786', '12-453786'),
('-12453786', '1-2453786'),
('12-453786', '1-2453786'),
('1524-3786', '1-2453786'),
('1234-5786', '12345-786'),
('12345678-', '12345-786')]
这个特定谜题的预期结果应该是 2 步
【问题讨论】:
-
请提供您当前的代码
-
已添加,对此感到抱歉。
标签: python list indexing linked-list tuples