#P1481. The Die Is Cast
The Die Is Cast
题目描述
InterGames 是一家专注于开发互联网游戏技术的高科技初创公司。市场分析显示,潜在用户对机会游戏(如大富翁、飞行棋、双陆棋等)非常感兴趣,而这些游戏通常涉及掷骰子的环节。
为了避免玩家作弊(如手动输入虚假骰子结果),InterGames 决定为用户配备摄像头:拍摄骰子图像后,程序自动分析并传输骰子点数。
任务要求
编写一个程序,根据输入的图像识别骰子上的点数。图像满足以下条件:
- 像素类型:图像仅包含三种像素值:
.
表示背景,*
表示骰子本体,X
表示骰子上的点(即点数)。
- 连通性定义:两个像素共享一条边(上下左右)时视为连通(斜对角不算)。例如,下图中
A
和B
连通,但B
和C
不连通:A B C
- 骰子与点的判定:
- 骰子:所有
*
或X
像素组成的最大连通区域(无法再添加其他非背景像素而不破坏连通性)。 - 点:每个
X
像素组成的最大连通区域视为一个点。
- 骰子:所有
输入格式
- 每组数据以两个整数
w
(宽度)和h
(高度)开始(5 ≤ w, h ≤ 50
)。 - 接下来是
h
行,每行w
个字符(.
、*
或X
)。 - 骰子可能因光学畸变而形状不规则,但点数范围是 1 到 6。
- 输入以
w = h = 0
结束。
输出格式
- 对每组数据,先输出
Throw N
(N
为测试用例编号)。 - 然后按升序输出所有骰子的点数,用空格分隔。
- 每组输出后空一行。
示例输入与输出
输入 1
30 15
..............................
..............................
...............*..............
...*****......****............
...*X***.....**X***...........
...*****....***X**............
...***X*.....****.............
...*****.......*..............
..............................
........***........******.....
.......**X****.....*X**X*.....
......*******......******.....
.....****X**.......*X**X*.....
........***........******.....
..............................
0 0
输出 1
Throw 1
1 2 2 4
来源
1998 年西南欧区域赛(Southwestern European Regional Contest)