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. WinForm 公共控件和属性

    Button  按钮 布局 AutoSize 内容超出部分是否扩展到适应尺寸大小 Location  位置坐标 Size   控件大小 行为 Enabled   控件是否启用 visible   控件 ...

  2. coredata 关系的删除规则

    http://blog.csdn.net/Hello_Hwc/article/details/46375517 关系的删除规则-Delete Rule Deny 关系的destination中只要有一 ...

  3. 2018.4.9 Ubuntu install kreogist-mu

    先下载kreogist m文件 然后在下载哪里右键点击打开终端 输入sudo dpkg -i + 文件名 输入密码 下一步会显示 未安装未安装软件包 libmpv1. jiexialai要处理 sud ...

  4. 原型模式 -- JavaScript语言的灵魂

    原型模式就是将原型对象指向创建对象的类,使这些类共享原型对象的方法与属性.JS是基于原型链实现对象之间的继承,是对属性或者方法的共享,而不是对属性和方法的复制. // 图片轮播类 var LoopIm ...

  5. c#和Java中的接口

    使用场景: 在c#和Java中: 1.接口可以实现“多继承”(多实现),一个类只能继承自一个父类,但是可以实现多个接口. 2.接口解决了不同类型之间的多态问题,比如鱼与船不是同一类型,但是都能在水里“ ...

  6. Confirm the Ending--freecodecamp算法题目

    Confirm the Ending(检查字符串结尾) 要求 判断一个字符串(str)是否以指定的字符串(target)结尾. 如果是,返回true;如果不是,返回false. 思路 利用.repla ...

  7. 51nod——1391 01串(字符串、前缀和)

    好像这题是4级题下放2级? 预处理:求每个位置 x 左区间 [ 0 , x ] 中 1 比 0 多的数量和右区间 ( x , n - 1 ] 中 0 比 1 多的数量(少就是负的).相当于求两个前缀和 ...

  8. kubernetes安装rabbitmq集群

    1.准备K8S环境 2.下载基础镜像,需要安装两种插件:autocluster.rabbitmq_management 方法一: 下载已有插件镜像 [root@localhost ~]#docker ...

  9. DeepFaceLab小白入门(2):软件安装!

    严格上来说这个软件本身并不需要安装,他唯一需要的就是对应版本的显卡驱动,CUDA和CuDNN都非必须.下面我说一下如何安装正确的驱动版本.我尽量写得简洁清晰,希望大家都能看懂,但是,如果你连基本的电脑 ...

  10. MyBatis的增删改查操作

    搭建好mybatis之后 进行对数据库的操作 添加语句 在映射文件中添加语句 insert into student(name,age,score) values(#{name},#{age},#{s ...