#P1101. The Game
The Game
题目描述(Description)
某天早晨,你醒来后心想:“我真是个优秀的程序员,何不写个游戏赚点钱呢?”于是你决定开发一个电脑游戏。
游戏发生在一个由 个方格组成的矩形棋盘上。棋盘上的每个格子可能包含一个棋子,也可能为空(如下图所示)。
游戏中一个重要的规则是:判断两个棋子是否可以通过一条路径连接,且该路径需满足以下两个条件:
路径由若干个直线段组成,每个线段要么是水平的,要么是垂直的;
路径不能穿过其他棋子;
(允许路径在中间暂时离开棋盘后又回到棋盘上)
例如:
位于 和 的棋子可以连接;
位于 和 的棋子无法连接,因为每条路径都会穿过至少一个其他棋子。
你需要实现的是这个功能的判断部分,判断两个棋子是否可以连接,并输出其最少由多少段直线组成。
输入格式(Input)
输入数据包含若干个棋盘描述:
每个棋盘的第一行包含两个整数 和 ,表示棋盘的宽度和高度,满足 ;
接下来的 行,每行包含 个字符:
'X' 表示该格子上有棋子;
' '(空格)表示该格子为空;
然后跟若干行,每行包含四个整数 ,表示两颗棋子的坐标(满足 ,);
坐标 表示左上角;
坐标保证不相同;
每个棋盘的棋子对以一行 0 0 0 0 结束;
所有输入以一组 w = 0, h = 0 的棋盘描述作为结束标志,不需要处理这组数据。
输出格式(Output)
对每个棋盘,输出一行 Board #n:,其中 是该棋盘的编号(从 开始);
对该棋盘的每对棋子:
输出一行 Pair m: ,其中 是该对棋子的编号(每个棋盘从 开始编号);
若两颗棋子可以连接,输出最少的段数,如 4 segments.;
否则输出 impossible.;
每个棋盘输出完毕后,输出一个空行。
输入样例(输入数据 1)
5 4
XXXXX
X X
XXX X
XXX
2 3 5 3
1 3 4 4
2 3 3 4
0 0 0 0
0 0
输出样例(输出数据 1)
Board #1:
Pair 1: 4 segments.
Pair 2: 3 segments.
Pair 3: impossible.