我正在尝试用 Python 编写一个简单的 A* 求解器,用于一个简单的 8-Puzzle 游戏。我以这种方式表达了我的游戏目标:
goal = [[1, 2, 3],
[8, 0, 4],
[7, 6, 5]]
我的问题是我不知道如何为我的目标编写一个简单的曼哈顿距离启发式。我知道它应该被定义为通用状态和我的目标状态之间的距离之和。我想我应该编写如下代码:
def manhattan_distance(state):
distance = 0
for x in xrange(3):
for y in xrange(3):
value = state[x][y]
x_value = x
y_value = y
x_goal = ...?
y_goal = ...?
distance += abs(x_value - x_goal) + abs(y_value - y_goal)
return distance
我的问题是我没有明确表示目标状态下棋子的坐标,所以我不知道如何为棋盘的“价值”棋子定义“x_goal”和“y_goal”。我正在尝试使用除法和模块操作来做到这一点,但这很困难。
你能给我一些提示来定义我的“x_goal”和“y_goal”变量吗?
谢谢