SP32271 KNIGHTSG - KNIGHTS level testing
题目描述

上图是Arzola的电子游戏“KNIGHTS”中的关卡示例。规则非常简单。玩家会得到一个棋盘,每个方块要么是空的,要么包含一堵墙,要么包含三种颜色之一的骑士。一些方块也标有颜色--如果所有标记的方块同时包含各自颜色的骑士,玩家就会通关。为了达到这个目的,玩家可以选择任何骑士,并使用经典的国际象棋骑士动作将他放在一个空的方格上(一个方向2个方格,垂直于第一个方向的1个方格)。
您将帮助测试此游戏的一些新关卡设计。给定一个起始配置和几个目标配置(描述哪些方块包含哪个骑士),找到达到这些目标配置所需的最小移动次数。
输入格式
第一行包含两个整数 $r$,$c$ 。
以下 $r$ 行各包含 $c$ 个字符,描述关卡的起始配置。网格中的字符为“#”表示墙,“.”表示空方块,“$R$”、“$B$”和“$Y$”分别表示红色、蓝色和黄色骑士。__不是墙的正方形数量最多为 12 个。__
后面是一行空行,__后面是一行整数 $q$ 此级别建议的目标配置数。你可以假设 q * r * c__
$q$ 以下为目标配置说明,用空行分隔。每个描述都是由 $c$ 个字符组成的 $r$ 行,与起始配置来自同一集合。您可以假设墙壁的位置与起始配置中的位置相同,并且每种颜色的骑士数量与起始配置中该颜色的骑士数量相同。
输出格式
每个输出占一行,对于每个建议的目标配置,如果在任意数量的移动中都无法从起始配置到达该配置,则输出 -1。
否则,从起始配置输出达到该目标配置所需的最小移动次数。