编程语言
首页 > 编程语言> > 在8-Puzzle游戏中用Python计算曼哈顿距离

在8-Puzzle游戏中用Python计算曼哈顿距离

作者:互联网

我正在尝试用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’变量吗?

谢谢

解决方法:

您可以找到大多数pythonic实现.

假如说,

0 1 2

3 4 5

6 7 8

是目标国家……
和,

1 5 3

4 2 6

7 8 9

是最后的状态.

initial_state = [1,5,3,4,2,6,7,8,0]
goal_state = [0,1,2,3,4,5,6,7,8]
def calculateManhattan(initial_state):
    initial_config = initial_state
    manDict = 0
    for i,item in enumerate(initial_config):
        prev_row,prev_col = int(i/ 3) , i % 3
        goal_row,goal_col = int(item /3),item % 3
        manDict += abs(prev_row-goal_row) + abs(prev_col - goal_col)
    return manDict

我不知道怎么解释这个.它只是有效.请享用 ! :d

标签:python,search,puzzle,a-star
来源: https://codeday.me/bug/20190709/1410036.html