#P1178. Camelot
Camelot
题目描述
几个世纪前,亚瑟王和圆桌骑士每年都会在新年当天聚会庆祝他们的友谊。为了纪念这些事件,我们考虑一个单人棋盘游戏,棋盘上随机放置一个国王棋子和若干骑士棋子,每个棋子位于不同的方格。
棋盘是一个8×8的方格阵列。国王可以移动到任意相邻方格(如图2所示),只要不超出棋盘边界。骑士可以按图3所示的方式跳跃移动,同样不能超出棋盘边界。在游戏过程中,多个棋子可以位于同一方格——方格足够大,棋子之间不会阻碍移动。

玩家的目标是将所有棋子移动到同一方格,且总移动步数最少。移动规则如下:国王和骑士按各自规则移动。此外,当国王与一个或多个骑士位于同一方格时,玩家可以选择让国王与其中一个骑士“绑定”,此后作为单个“骑士”一起移动,直至最终聚集点。绑定后的移动视为一步。
请编写程序,计算将所有棋子聚集到同一方格所需的最小移动步数。
输入
程序从标准输入读取数据。输入包含初始棋盘配置,编码为一个字符串。字符串中前一个位置是国王的坐标,后续位置是骑士的坐标(最多63个)。每个坐标由一个字母和一个数字组成:字母表示水平坐标(A-H),数字表示垂直坐标(1-8)。
- 骑士数量满足 (0 \leq \text{数量} \leq 63)
输出
程序向标准输出写入一行,包含一个整数,表示将所有棋子聚集到同一方格所需的最小移动步数。
输入数据 1
D4A3A8H1H8
输出数据 1
10