我正在尝试计算n_puzzle问题中每个 misplaced 的瓷砖所需的移动次数,以将其移动到正确的位置。
例如,在3×3的网格中,如果瓷砖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
任何建议都将不胜感激!
回答:
假设 misplaced 的瓷砖位于位置(x, y),而正确的位置应该是(w, z)。将瓷砖移动到正确位置所需的移动次数为:
n_moves = abs(x - w) + abs(y - z)