#EXER0305. 连连看
连连看
时间限制: 2.0 秒
空间限制: 512 MB
题目描述
本题要求模拟连连看游戏的消去操作。
给定一个 的初始棋盘,棋盘里有编号为 的方块,保证每个编号成对出现。
你需要对此棋盘进行一系列的消去操作,直至所有方块全部消去或无解(当前棋盘不存在可以消去的方块对)即可结束。
如果同时有多个可以消去的方块对,你应当首先消去坐标更小的:
- 棋盘坐标以左上角为原点, 方向向下, 方向向右。样例 1 中两个编号为 的方块坐标(从左至右)分别为
- 坐标大小的定义为:对于两个坐标 ,先比较 ,如果相等,再比较 。如 ,
- 如果有两对可以消去的方块对 ,先比较 和 ,如果相等,再比较 和
两个方块可以相互消去当且仅当:
- 两个方块编号相同;
- 两个方块可通过一条棋盘内的路径相连。该路径包含的线段数量不超过三条,且路径中无其他方块。
输入格式
从标准输入读入数据。
第一行给出两个正整数 。
接下来 行,每行 个整数,表示初始棋盘。数值为 表示该位置为空,大于 表示对应的方块编号(编号值 )。
输出格式
输出到标准输出。
按消去的先后顺序输出所有可以消去的方块对的坐标。假设 可消去,先输出其中较小的坐标,再输出其中较大的坐标。每行四个正整数,用空格隔开。
游戏结束时,输出一行反馈:
- 若所有方块均已消去,输出
finish; - 若还有方块未消去但此时已无解,输出
no solution。
5 4
0 0 0 1
4 2 4 0
2 0 4 0
0 0 0 0
0 0 4 1
1 4 5 4
2 1 2 3
2 2 3 1
3 3 5 3
finish
8 8
7 0 13 5 0 9 11 0
4 11 2 2 7 0 0 13
4 0 9 9 12 6 11 3
11 0 4 3 0 9 0 13
0 5 9 6 0 6 0 6
12 0 5 0 9 0 11 0
5 0 13 11 4 3 5 0
4 0 8 4 0 5 3 8
1 7 3 7
1 6 4 6
2 1 3 1
2 2 4 1
2 3 2 4
1 1 2 5
1 3 2 8
1 4 5 2
3 3 3 4
3 5 6 1
3 6 5 4
3 8 4 4
4 3 8 1
4 8 7 3
5 3 6 5
5 6 5 8
6 3 7 1
6 7 7 4
7 5 8 4
8 3 8 8
no solution
来源
原创。作者:校验环