Рассчитать манхэттенское расстояние для задачи n_puzzle?

Я пытаюсь вычислить для каждой плитки в задаче n_puzzle, где плитка неуместна, найти количество ходов, необходимых для достижения правильного места.

Например, сетка 3x3, если плитка 1 была в верхнем левом углу (0,0), а должна быть в правом нижнем углу (2,2), для достижения цели потребовалось бы 4 хода.

Я сохраняю пазл в виде [0, 0, [0, 1, 2], [3, 4, 5], [6, 7, 8]]где первые два значения представляют собой координаты нуля пустого тайла. На данный момент у меня есть метод, который подсчитывает, сколько плиток потеряно:

      def GetDist(self):
    if self.value == self.goal:
        return 0
    dist = 0
    for a, b in zip(self.value[2], self.goal[2]):
        for g, t in zip(a, b):
            if g != t:
                dist += 1
    return dist

Любые советы будут высоко ценится!

1 ответ

Допустим, неуместная плитка находится в позиции (x, y), а правильная позиция должна быть (w, z). Количество ходов, необходимых для перемещения плитки в правильное положение:

      n_moves = abs(x - w) + abs(y - z)
Другие вопросы по тегам