10333 - 亚瑟王的宫殿

很久以前,亚瑟王和他的骑士习惯每年元旦去庆祝他们的友谊。在回忆中,我们把这些是看作是一个有一人玩的棋盘游戏。有一个国王和若干个骑士被放置在一个由许多方格组成的棋盘上,没有两个骑士在同一个方格内。 这个例子是标准的8*8棋盘  

国王可以移动到任何一个相邻的方格,从 到 前提是他不掉出棋盘之外。

一个骑士可以从 移动到 但前提是他不掉出棋盘之外。

玩家的任务就是把所有的棋子移动到同一个方格里——用最小的步数。为了完成这个任务,他必须按照上面所说的规则去移动棋子。玩家必须选择一个骑士跟国王一起行动,其他的单独骑士则自己一直走到集中点。骑士和国王一起走的时候,只算一个人走的步数。

写一个程序去计算他们集中在一起的最小步数,而且玩家必须自己找出这个集中点。当然,这些棋子可以在棋盘的任何地方集合。

输入

第一行: 两个用空格隔开的整数:R,C 分别为棋盘行和列的长。不超过26列,40行。 第二行..结尾: 输入文件包含了一些有空格隔开的字母/数字对,一行有一个或以上。第一对为国王的位置,接下来是骑士的位置。可能没有骑士,也可能整个棋盘都是骑士。行从1开始,列从大写字母A开始。

输出

单独一行表示棋子集中在一个方格的最小步数。

样例

输入

8 8
D 4
A 3 A 8
H 1 H 8
国王位置在D4。一共有四个骑士,位置分别是A3,A8,H1和H8。

输出

10

SAMPLE OUTPUT ELABORATION 
他们集中在B5。
骑士1: A3 - B5 (1步) 
骑士2: A8 - C7 - B5 (2步) 
骑士3: H1 - G3 - F5 - D4 (picking up king) - B5 (4步) 
骑士4: H8 - F7 - D6 - B5 (3步) 
1 + 2 + 4 + 3 = 10步

提示

Camelot IOI 98 Centuries ago, King Arthur and the Knights of the Round Table used to meet every year on New Year's Day to celebrate their fellowship. In remembrance of these events, we consider a board game for one player, on which one chesspiece king and several knight pieces are placed on squares, no two knights on the same square.

This example board is the standard 8x8 array of squares:

The King can move to any adjacent square from to as long as it does not fall off the board:

A Knight can jump from to , as long as it does not fall off the board:

During the play, the player can place more than one piece in the same square. The board squares are assumed big enough so that a piece is never an obstacle for any other piece to move freely.

The player's goal is to move the pieces so as to gather them all in the same square - in the minimal number of moves. To achieve this, he must move the pieces as prescribed above. Additionally, whenever the king and one or more knights are placed in the same square, the player may choose to move the king and one of the knights together from that point on, as a single knight, up to the final gathering point. Moving the knight together with the king counts as a single move.

Write a program to compute the minimum number of moves the player must perform to produce the gathering. The pieces can gather on any square, of course.

PROGRAM NAME: camelot INPUT FORMAT Line 1: Two space-separated integers: R,C, the number of rows and columns on the board. There will be no more than 26 columns and no more than 40 rows. Line 2..end: The input file contains a sequence of space-separated letter/digit pairs, 1 or more per line. The first pair represents the board position of the king; subsequent pairs represent positions of knights. There might be 0 knights or the knights might fill the board. Rows are numbered starting at 1; columns are specified as upper case characters starting with `A'.

SAMPLE INPUT (file camelot.in) 8 8 D 4 A 3 A 8 H 1 H 8

The king is positioned at D4. There are four knights, positioned at A3, A8, H1, and H8.

OUTPUT FORMAT A single line with the number of moves to aggregate the pieces. SAMPLE OUTPUT (file camelot.out) 10

SAMPLE OUTPUT ELABORATION They gather at B5. Knight 1: A3 - B5 (1 move) Knight 2: A8 - C7 - B5 (2 moves) Knight 3: H1 - G3 - F5 - D4 (picking up king) - B5 (4 moves) Knight 4: H8 - F7 - D6 - B5 (3 moves) 1 + 2 + 4 + 3 = 10 moves.

时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题