题意翻译

输入一个r 行c 列(1<r,.c<10) 的网格,黑格用“*”每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出了网格边界),则称这个白格是一个起始格
你的任务是找出网格中所有所有横向单词(Across)。.这些单词必须从一个起始格(左边是黑格,或是第一列) 开始,向右延伸到一个黑格的左边或者整个网格的最右列。然后找出所有竖向单词(Down)。
这些单词必须从一个起始格(上边是黑格,或是第一行) 开始,向下延伸到一个黑格的上边或者整个网格的最下行。
输入:
有多个矩阵输入,每一个矩阵都是以RC 开始(1<r,c<10),表示R 行C 列,然后下面紧跟着一个R 行C 列的矩阵,里面全部是大写字母或是,以,C 代表所有矩阵输入结束。

翻译来自网络

输入输出样例

输入 #1

2 2
AT
*O
6 7
AIM*DEN
*ME*ONE
UPON*TO
SO*ERIN
*SA*OR*
IES*DEA
0

输出 #1

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

思路

翻译比较难理解,建议结合[PDF](Crossword Answers - UVA 232 - Virtual Judge (vjudge.net))理解.思路总体来讲,先输入,再从1开始,逐行的标记起始格,再根据起始格输出横向单词和竖向单词.难点主要是输出的格式,还有不能重复单词.

代码

#include <stdio.h>
#include <string.h>
// 网格
char str[12][12];
// 记录起始格坐标
struct Par {int x;int y;
};
Par arr[105];
int main() {int num = 0;while (1) {int r, c;int count = 0;// 注意每次循环需要初始化memset(arr, -1, sizeof(arr));memset(str, ' ', sizeof(str));scanf("%d", &r);// 结束条件if (!r) {return 0;}// 注意相邻两个答案之间需要一个空行if (num) {printf("\n");}        scanf("%d", &c);for (int i = 0; i < r; i++) {scanf("%s", str[i]);}for (int i = 0; i < r; i++) {for (int j = 0; j < c; j++) {if (str[i][j] != '*') {// 判断起始格if (i == 0 || j == 0 || str[i - 1][j] == '*' || str[i][j - 1] == '*') {count++;arr[count].x = i;arr[count].y = j;} else {continue;}} else {continue;} }}printf("puzzle #%d:\n", ++num);printf("Across\n"); for (int i = 1; arr[i].y != -1 && arr[i].x != -1; i++) {// 注意这个序列号是右对齐,而且是3位的printf("%3d.", i);int n = arr[i].x;int m = arr[i].y;if (str[n][m] == '*') {continue;}for (int j = m; str[n][j] != '*' && j < c; j++) {printf("%c", str[n][j]);// 不能重复输出已经输出单词的后缀字符串if (arr[i + 1].y == j && arr[i + 1].x == n) {i++;}}printf("\n");}printf("Down\n");for (int i = 1; arr[i].y != -1 && arr[i].x != -1; i++) {int n = arr[i].x;int m = arr[i].y;if (str[n][m] == '*') {continue;}printf("%3d.", i);for (int j = n; str[j][m] != '*' && j < r; j++) {printf("%c", str[j][m]);// 竖向单词输出后,为了避免输出后缀字符串,可以直接用'*'覆盖掉str[j][m] = '*';}   printf("\n");}    }return 0;
}

总结

总体思路还是很简单,最需要注意的就是输出格式

UVA232 纵横字谜的答案 Crossword Answers 题解相关推荐

  1. 纵横字谜的答案(Crossword Answers UVa232)

    做到这个题目的时候发现和前面的那个题目非常的像,都是字符都是表格.依然是用一个二维字符数组,储存表格的状况,然后进行搜索判断. 先写一下我犯的错误吧,读者看到我犯过的错误之后说不定就找到自己的方法了呢 ...

  2. UVa232纵横字谜的答案

    //纵横字谜的答案 #include <stdio.h> #include <ctype.h> int main (){int r,c;int count = 0; while ...

  3. 纵横字谜的答案 (UVa232)

    纵横字谜的答案 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit  Status De ...

  4. 习题3-6 纵横字谜的答案 UVa232

    算法竞赛入门经典(第2版)第3章 数组和字符串 习题3-6 纵横字谜的答案 UVa232 感悟. 1.决定自此,每做一道,必从网站下载该道的PDF文件,废弃从别处下载的PDF文件,因其错误太多. 2. ...

  5. 纵横字谜的答案(Uva232)

    纵横字谜的答案(Uva232) 题目UVa232,题目考察点时二维数组的使用.注意点是需要读懂题目意思,关键点是起始格需要用额外用一个数组存储.然后根据横向和纵向单词的定义,结合起始格,循环遍历打印输 ...

  6. 《算法竞赛入门经典》(第2版) 习题3-6 纵横字谜的答案

    题目 习题3-6 纵横字谜的答案(Cross Answers,ACM/ICPC World Final 1994, UVa232)ps: Final???!!!难道是1994年世界总决赛的第一题-哈哈 ...

  7. 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)

    原题vjudge 输入一个r行c列(1≤r,c≤10)的网格,黑格用"*"表示,每个白格都填有一个字母. 如 果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出 ...

  8. UVa232 Crossword Answers(纵横字谜的答案)

    题意: 输入一个r行c列的网格,*表示黑格,字母表示白格.若一个白格位于边界或上方是黑格或左方是黑格,则称其为起始格.找出所有横向单词和竖向单词,其必须从一个起始格开始,到黑格或网格边界为止. 思路: ...

  9. 纵横字谜的答案(Crossword Answers)

    输入一个r行c列(1<=r,c<=10)的网格,黑格用"*"表示,每个白格都填有一个字母,如果一个白格的左边相邻的位置或者边上相邻的位置没有白格(可能是黑格,也可能除了 ...

最新文章

  1. 怎样快速学习React
  2. 导致甲骨文裁员的原因有哪些?
  3. usg2130 虚拟服务器,usg2130防火墙怎么样设置
  4. 程序员面试系列——有符号数的溢出
  5. C# 定时器定时更新
  6. 使用阿里云智能翻译接口案例——CSDN博客
  7. swig模板 PHP,如何使用nodejs前端模板引擎swig
  8. ios keychain 不被清理_苹果手机卸载软件会不会有残留?带你认识iOS沙盒机制!...
  9. linux 红帽6系统下载,Red Hat Enterprise Linux 6.2 ISO 下载
  10. oracle错误01653,oracle 10g 错误 ORA 01653 的解决过程
  11. Java开发笔记(一百三十)Swing的选择框
  12. golang ide 环境搭建_golang环境搭建
  13. Luogu1712 [NOI2016] 区间
  14. 《Head First 设计模式》例子的C++实现(2 观察者模式)
  15. 哈夫曼树及哈夫曼编码例题
  16. OpenCV调用摄像头录像并保存下来
  17. webserver的使用
  18. 心形炫彩LED灯设计
  19. 三维电子沙盘大数据互动触摸交互可视化地理信息系统
  20. python3 模块调用其他类的方法_python类的函数调用 python如何引用其他模块中类的方法中的变量?...

热门文章

  1. java parcelable转json字符串,json 字符串转parcelable
  2. 广发财智金好不好用?了解下再说
  3. (实测可用)STM32 CubeMx安装教程
  4. 学籍信息管理系统--------总体设计
  5. 定类,定序,定距,定比
  6. Vectorworks 2022 mac(3D建模专用工具)v2022.SP3完美支持m1
  7. java水果爆炸动画,这种水果叫炮弹果会爆炸?这是一起海关人员被媒体坑了的沙雕事件...
  8. ulimit -c unlimited linux系统对core文件限制解除
  9. 逆战选择服务器后显示器,逆战游戏设置知识_隐藏在数据设置背后的大学问_叶子猪逆战...
  10. android ratingbar 高度,Android RatingBar终极解决方案,大小、颜色、间距、样式随便定义...