输入一个 r 行 c 列的网格,黑格用 *
表示,每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出了网格边界),则称这个白格是一个起始格。
首先把所有起始格按照从上到下、从左到右的顺序编号为 1,2,3,...。
接下来要找出所有横向单词(Across)。这些单词必须从一个起始格开始,向右延伸到一个黑格的左边或者整个网格的最右列。最后找出所有竖向单词(Down)。这些单词必须从一个起始格开始,向下延伸到一个黑格的上边或者整个网格的最下行。
输入
输入中的每个拼图解决方案以包含两个整数 r,c \ (1 \leq r,c \leq 10) 的行开始,其中第一个数字 r 是拼图中的行数,第二个数字 c 是列数。
随后的 r 行输入包含描述解决方案的 c 个字符(不包括行尾)。这些 c 个字符中的每一个都是一个字母或表示黑色方块的字符 *
。
输入结束由单个数字 0 组成的行表示。
输出
每个拼图的输出包括拼图的标识符(puzzle #1
、puzzle #2
等)以及随后的单词列表。每个列表中的单词必须按照相应定义数量的增加顺序逐行输出。
跨越单词列表的标题是 Across
。 下降单词列表的标题是 Down
。
在列表为空的情况下(网格中的所有正方形都为黑色),Across
和 Down
标题仍应显示。
如果有多个谜题,谜题与谜题直接应有一个空白行,详见样例。
样例
标准输入 复制文本 |
2 2 AT *O 6 7 AIM*DEN *ME*ONE UPON*TO SO*ERIN *SA*OR* IES*DEA 0 |
标准输出 复制文本 |
puzzle #1: Across 1.AT 3.O Down 1.A 2.TO puzzle #2: Across 1.AIM 4.DEN 7.ME 8.ONE 9.UPON 11.TO 12.SO 13.ERIN 15.SA 17.OR 18.IES 19.DEA Down 1.A 2.IMPOSE 3.MEO 4.DO 5.ENTIRE 6.NEON 9.US 10.NE 14.ROD 16.AS 18.I 20.A |