A crossword puzzle consists of a rectangular grid of black and white squares and two lists of definitions (or descriptions).

One list of definitions is for ``words" to be written left to right across white squares in the rows and theother list is for words to be written down white squares in the columns. (A word is a sequence of alphabetic characters.)

To solve a crossword puzzle, one writes the words corresponding to the definitions on the white squares of the grid.

The definitions correspond to the rectangular grid by means of sequential integers on eligible" white squares. White squares with black squaresimmediately to the left or above them are eligible." White squares with nosquares either immediately to the left or above are also ``eligible." No othersquares are numbered. All of the squares on the first row are numbered.

The numbering starts with 1 and continues consecutively across white squares of the first row, then across the eligible white squares of the second row, then across the eligible white squares of the third row and so on across all of the rest of the rows of the puzzle. The picture below illustrates a rectangular crossword puzzle grid with appropriate numbering.

An across" word for a definition is written on a sequence of white squares ina row starting on a numbered square that does not follow another white square in the same row. The sequence of white squares for that word goes across the row of the numbered square, ending immediately before the next black square in the row or in the rightmost square of the row. A down" word for a definition is written on a sequence of white squares in acolumn starting on a numbered square that does not follow another white square in the same column.

The sequence of white squares for that word goes down the column of the numbered square, ending immediately before the next black square in the column or in the bottom square of the column.

Every white square in a correctly solved puzzle contains a letter.

You must write a program that takes several solved crossword puzzles as input and outputs the lists of across and down words which constitute the solutions.

Input

Each puzzle solution in the input starts with a line containing two integers rand c ( and ), where r (the first number) is the number ofrows in the puzzle and c (the second number) is the number of columns.

The rrows of input which follow each contain c characters (excluding the end-of-line) which describe the solution. Each of those c characters is an alphabeticcharacter which is part of a word or the character *", which indicates ablack square. The end of input is indicated by a line consisting of the single number 0. Output Output for each puzzle consists of an identifier for the puzzle (puzzle #1:,puzzle #2:, etc.) and the list of across words followed by the list of downwords. Words in each list must be output one-per-line in increasing order of the number of their corresponding definitions. The heading for the list of across words is Across". The heading for the list of down words is ``Down".

In the case where the lists are empty (all squares in the grid are black), the Across and Down headings should still appear.

Separate output for successive input puzzlesby a blank line.

Sample Input

2 2

AT

O

6 7

AIM
DEN

MEONE

UPONTO

SO
ERIN

SAOR*

IES*DEA

0

Sample Output

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

这个不是我们杂志后面的填字游戏,这个东西据说是从英国传过来的。意思根据题一看都懂,而且输出大家也都会,只是个循环控制。关键就是其编号,这个编号我想的挺久的,当时还是蛮蒙逼的。找规律,呸,就是看图,你编号的都是有字母的,然后就是按照先行后列的顺序,什么时候需要编号呢,就是在单词开始的地方啊,什么时候开始,首先左上边界上的可能会越界,你可以特判,这只要是是字母一定是要排序的,往右往下走,这个顺序上你到了下一状态是要考虑它上面和它左边,只有不是字母才有序,因为是开始啊。综上,开始只能是左上边界,和左面上面都是*的,接下来就很简单了

AC代码

#include <stdio.h>
int main()
{char s[15][15];
int m,n,cas=0;
while(scanf("%d",&m),m){
if(cas)printf("\n");
int a[15][15]={0};
scanf("%d",&n);
for(int i=1;i<=m;i++)
scanf("%s",s[i]);
int f=1;
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++){
if(s[i][j]!= '*'){
if(i==1||j==0)
a[i][j]=f++;
else{
if(s[i-1][j]=='*'||s[i][j-1]== '*')
a[i][j]=f++;}}}}
printf("puzzle #%d:\nAcross\n",++cas);
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++)
if(a[i][j]){
printf("%3d.",a[i][j]);
for(;j<n;j++)
if(s[i][j]=='*')
break;
else
printf("%c",s[i][j]);
printf("\n");
}}
printf("Down\n");
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++)
if(a[i][j]&&(i==1||s[i-1][j]=='*')){
printf("%3d.",a[i][j]);
for(f=i;f<=m;f++)
if(s[f][j]=='*')
break;
else
printf("%c",s[f][j]);
printf("\n");
}}
} return 0;
}

紫书第三章训练1 D - Crossword Answers的更多相关文章

  1. 紫书第三章训练1 E - DNA Consensus String

    DNA (Deoxyribonucleic Acid) is the molecule which contains the genetic instructions. It consists of ...

  2. 紫书第五章训练3 D - Throwing cards away I

    D - Throwing cards away I Given is an ordered deck of n cards numbered 1 to n with card 1 at the top ...

  3. 紫书第五章训练2 F - Compound Words

    F - Compound Words You are to find all the two-word compound words in a dictionary. A two-word compo ...

  4. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数

    整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...

  5. 周志华-机器学习西瓜书-第三章习题3.5 LDA

    本文为周志华机器学习西瓜书第三章课后习题3.5答案,编程实现线性判别分析LDA,数据集为书本第89页的数据 首先介绍LDA算法流程: LDA的一个手工计算数学实例: 课后习题的代码: # coding ...

  6. 【转载】Java垃圾回收内存清理相关(虚拟机书第三章),GC日志的理解,CPU时间、墙钟时间的介绍

    主要看<深入理解Java虚拟机> 第三张 P84 开始是垃圾收集相关. 1. 1960年诞生于MIT的Lisp是第一门采用垃圾回收的语言. 2. 程序计数器.虚拟机栈.本地方法栈3个区域随 ...

  7. 紫书第5章 C++STL

    例题 例题5-1 大理石在哪儿(Where is the Marble?,Uva 10474) 主要是熟悉一下sort和lower_bound的用法 关于lower_bound: http://blo ...

  8. ROS机器人程序设计(原书第2版)补充资料 (叁) 第三章 可视化和调试工具

    ROS机器人程序设计(原书第2版)补充资料 (叁) 第三章 可视化和调试工具 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. ~$ rosl ...

  9. linux内核设计与实现一书阅读整理 之第三章

    chapter 3 进程管理 3.1 进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 内核调度的对象是线程而并非进程. 在现代操作系统中,进程提供两种虚拟机制: 虚拟处理器 ...

随机推荐

  1. Android商城开发系列(九)—— 首页频道布局的实现

    在上一篇博客当中,我们讲了关于首页轮询广告的实现,接下来讲解一下首页频道布局的实现,如下图所示: 这个布局用的是gridview去完成的,新建一个channel_item,代码如下所示: <?x ...

  2. last命令

    last——列出目前与过去登入系统的用户信息 命令所在路径:/usr/bin/last 示例1: $ last

  3. linux概念和体系

    1. Linux开机启动 2. Linux文件管理 3. Linux的架构 4. Linux命令行与命令 5. Linux文件管理相关命令 6. Linux文本流 7. Linux进程基础 8. Li ...

  4. POJ 4020 NEERC John's inversion 贪心+归并求逆序对

    题意:给你n张卡,每张卡上有蓝色和红色的两种数字,求一种排列使得对应颜色数字之间形成的逆序对总数最小 题解:贪心,先按蓝色排序,数字相同再按红色排,那么蓝色数字的逆序总数为0,考虑交换红色的数字消除逆 ...

  5. CF Gym 100187D Holidays (数学,递推)

    题意:给n个元素,从n中选两个非空集合A和B.问有多少中选法? 递推: dp[n]表示元素个数为n的方案数,对于新来的一个元素,要么加入集合,要么不加入集合自成一个集合.加入集合有三种选择,A,B,E ...

  6. 连接惠普打印机(通过WIFI)

    第一步 找到打印机型号 第二步 到惠普官方网站下载对应驱动 第三步 安装驱动 第四步 安装驱动后选择WIFI连接(IP在打印机显示屏幕上显示,如果输入打印机屏幕IP连接失败:需要获取打印机真正的IP地 ...

  7. python_88_xml模块

    xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单例如创建xmltest.xml文件内容如上 注:/代表自结束符号 <?xml version=&quo ...

  8. springboot autoconfig

    springboot自动配置的核心思想是:springboot通过spring.factories能把main方法所在类路径以外的bean自动加载 springboot starter验证 我在spr ...

  9. CPP-基础:extern"C"

    简介:extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的:其次,被它修饰的目标是“C”的.让我们来详细解读这两重含义. 含义: 1.被e ...

  10. 《毛毛虫组》【Alpha】Scrum meeting 2

    第二天 日期:2019/6/15 1.1 今日完成任务情况以及遇到的问题. 今日完成任务情况: (1)对数据库表进行完善及测试: (2)定义Regex类的IsMatch()方法: (3)进行这一模块代 ...