#EXER0305. 连连看

    ID: 248 Type: Default 2000ms 512MiB Tried: 3 Accepted: 1 Difficulty: 5 Uploaded By: Tags>机试精选练习搜索搜索与剪枝模拟STL

连连看

时间限制: 2.0 秒

空间限制: 512 MB

题目描述

本题要求模拟连连看游戏的消去操作。

给定一个 n×mn \times m 的初始棋盘,棋盘里有编号为 1k1 \sim k 的方块,保证每个编号成对出现。

你需要对此棋盘进行一系列的消去操作,直至所有方块全部消去或无解(当前棋盘不存在可以消去的方块对)即可结束。

如果同时有多个可以消去的方块对,你应当首先消去坐标更小的:

  1. 棋盘坐标以左上角为原点,xx 方向向下,yy 方向向右。样例 1 中两个编号为 11 的方块坐标(从左至右)分别为 (1,4), (5,4)(1, 4),~(5, 4)
  2. 坐标大小的定义为:对于两个坐标 A(x1,y1), B(x2,y2)A(x1, y1),~B(x2, y2),先比较 x1,x2x_1, x_2,如果相等,再比较 y1,y2y_1, y_2。如 (1,3)<(2,2)(1, 3) \lt (2, 2)(1,2)<(1,3)(1, 2) \lt (1, 3)
  3. 如果有两对可以消去的方块对 (A1,A2), (B1,B2)(A_1, A_2),~(B_1, B_2),先比较 min(A1,A2)\min(A_1, A_2)min(B1,B2)\min(B_1, B_2),如果相等,再比较 max(A1,A2)\max(A_1, A_2)max(B1,B2)\max(B_1, B_2)

两个方块可以相互消去当且仅当:

  1. 两个方块编号相同;
  2. 两个方块可通过一条棋盘内的路径相连。该路径包含的线段数量不超过三条,且路径中无其他方块。

输入格式

从标准输入读入数据。

第一行给出两个正整数 n,m (2n,m200)n, m~(2 \le n, m \le 200)

接下来 nn 行,每行 mm 个整数,表示初始棋盘。数值为 00 表示该位置为空,大于 00 表示对应的方块编号(编号值 10000\le 10000)。

输出格式

输出到标准输出。

按消去的先后顺序输出所有可以消去的方块对的坐标。假设 (A1,A2)(A_1, A_2) 可消去,先输出其中较小的坐标,再输出其中较大的坐标。每行四个正整数,用空格隔开。

游戏结束时,输出一行反馈:

  1. 若所有方块均已消去,输出 finish
  2. 若还有方块未消去但此时已无解,输出 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

来源

原创。作者:校验环