#JDT9D. 同步机器人

同步机器人

题目描述

编程夏令营迎来了万众瞩目的最终挑战——机器人团队协作大赛!

小明的任务是为两台高度智能的机器人“阿尔法”和“贝塔”编写同步行动的程序。它们需要在一个的大型仓库中协同作业。

地图上有以下几种区域:

.:表示机器人可以行走的平坦通路。

#:表示机器人无法进入的障碍物。

AB:分别表示阿尔法和贝塔的起始位置。

ab:分别表示阿尔法和贝塔的目标位置。

小明只有一个中央控制器,每次只能发送一个指令,指令会同时传达给两台机器人。指令共有四种:N (上), S (下), W (西/左), E (东/右)。

当收到一个指令后,两台机器人会同时尝试向指定方向移动一格。如果某个机器人的目标方向是通路,它就会成功移动过去;但如果它的目标方向是障碍物或地图边界,它就会在原地保持不动。整个过程(发送指令 + 机器人尝试移动)花费 11 秒。

小明的目标是,找到一个最短的指令序列,使得阿尔法机器人和贝塔机器人能够在同一时刻,分别到达它们各自的目标点。

输入格式

第一行包含两个正整数 NNMM,表示仓库地图的行数和列数。

接下来 NN 行,每行一个长度为 MM 的字符串,描述整个地图。

其中 ABab 分别最多存在一个。

输出格式

输出一个整数,代表让两台机器人同时到达目标所需的最少秒数(即最短指令序列的长度)。

如果不可能让它们同时到达各自的目标点,则输出 IMPOSSIBLE

3 3 
A#B
...
a#b
2

数据范围

子任务 1 (20 分): 1N,M51≤N,M≤5

子任务 2 (30 分): 1N,M201≤N,M≤20

子任务 3 (50 分): 1N,M551≤N,M≤55