T590313 Bloxorz

题目背景

**时间限制:** 1.0 秒 **空间限制:** 512 MB

题目描述

Bloxorz 是一款风靡全球的益智游戏,以其独特的方块操控和复杂的关卡设计而著称。在这个游戏中,玩家需要使用键盘方向键来控制方块的移动,使其到达指定的终点。 ![Bloxorz](https://www.smqyoj.com/p/114/file/1.png) 具体的游戏规则如下:给定一个平面网格区域,每一格为空地,地面或玻璃。在地面上放置着一块 $1\times 1\times 2$ 的长方体木块,可以**竖放**在**一格地面**上,或**平放**在**相邻的两格地面、或相邻的两格玻璃、或相邻的一格地面和一格玻璃上**。每次操作可以选择四个方向中的一个,将木块向该方向滚动 $90\degree$。游戏的目标是以最少的移动次数将盒子**竖放**在唯一的目标地砖上。初始位置和目标位置的区域类型均为地面,而非玻璃或者空地。 给定一个 $n\times m$ 的平面网格,其中 `#` 表示空地,`.` 表示地面,`E` 表示玻璃,`X` 表示初始位置,`O` 表示目标位置,求达成游戏目标的最小操作数。

输入格式

从标准输入读入数据。 **本题包含多组测试数据。** 输入的第一行包含一个正整数 $T$,表示测试数据组数。 对于每组测试数据: 输入的第一行包含两个正整数 $n,m$,表示平面网格的大小。 输入的第 $i+1~(1\le i\le n)$ 行包含一个长度为 $m$ 的仅由 `#`、`.`、`E`、`X`、`O` 组成的字符串,描述给定的游戏局面,具体含义如【题目描述】中所示。

输出格式

输出到标准输出。 对于每组测试数据: 输出一行一个整数表示到达成游戏目标的最小操作数。特别地,若游戏目标无法达成,则输出 $-1$。

说明/提示

### 子任务 对于所有测试数据,保证 $1\le T\le 5,~3\le n,m\le 500$,保证每个游戏局面都有恰好一个 `O` 与恰好一个 `X` 或相邻的两个 `X`。保证给定的游戏局面中的第一行、第一列、最后一行、最后一列均为 `#`。 **本题采用捆绑测试,你只有通过一个子任务中的所有测试点才能得到该子任务的分数。** | 子任务编号 | 分值 | $n,m\le$ | |:---:|:---:| :---: | | 1 | 30 | $20$ | | 2 | 20 | $50$ | | 3 | 20 | $300$ | | 4 | 30 | $500$ |