UVa 232 Crossword Answers (纵横字谜的答案)
来源:互联网 发布:耐克计步器软件下载 编辑:程序博客网 时间:2024/04/29 12:31
题意:
白格:该位置字符是字母;黑格:该位置字符是'*';
起始格:一个白格的左边相邻位置或者上边相邻为之没有白格(可能是黑格或超出网格边界);
把起始格按照从上到下、从左到右顺序编号(1,2,3,4...)
横向单词(Across):从起始格开始且前一个不是白格,一直向右直到遇到黑格或除了边界。
竖向单词(Down):从起始格开始且上一个不是白格,一直向下直到遇到黑格或除了边界。
输入:
多组测试数据。每组数据第一行两个r,c数字,分别是网格行数和列数。
接下来是r行字符每行c列
遇到开始输入数字0结束输入。
输出:
相邻两个测试组之间有空行,但末尾无空行。
测试组找不出横向单词或竖向单词时,仍需输出Across或Down。
对于每个单词输出首字母的起始格编号。
其他细节参照样例。
先贴出AC代码,再讲下调试中遇到的问题。
#include <stdio.h>#include <string.h>#include <ctype.h>int main(){//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);char s[11][11];int r, c, i, j, k, a[11][11], d[11][11], first=1, count=0;while (~scanf("%d",&r)&&r){scanf("%d", &c);for (i = 1;i <= r;i++)scanf("%s", s[i]+1);//···①memset(a, 0, sizeof(a));memset(d, 0, sizeof(d));k = 0;for (i = 1;i <= r;i++)for (j = 1;j <= c;j++){if (s[i][j]!='*') a[i][j] = 1;//a[i][j]=1表示白格if (a[i][j]&&(a[i][j-1]==0||a[i-1][j]==0)) d[i][j] = ++k;//d[i][j]=k表示该起始格的编号是k}/* ···②for (i = 1;i <= r;i++)puts(s[i]+1);for (i = 1;i <= r;i++) {for (j = 1;j <= c;j++)printf("%d", a[i][j]);printf("\n");}for (i = 1;i <= r;i++) {for (j = 1;j <= c;j++)printf("%d", d[i][j]);printf("\n");}*/if (first) first = 0;else putchar('\n');printf("puzzle #%d:\nAcross\n", ++count);for (i = 1;i <= r;i++)for (j = 1;j <= c;j++){if (d[i][j] && a[i][j-1] ==0)//···③{printf("%3d.", d[i][j]);//···④for (k = j;a[i][k] == 1 && k <= c;k++)putchar(s[i][k]);putchar('\n');}}printf("Down\n");for (i = 1;i <= r;i++)for (j = 1;j <= c;j++){if (d[i][j]&&a[i-1][j]==0){printf("%3d.", d[i][j]);for (k = i;a[k][j] == 1 && k <= r;k++)putchar(s[k][j]);putchar('\n');}}}return 0;}
首先遇到的问题在输入上,我是想使s[i][j]直接表示第i行第j列的字符,但是输入时没有对j考虑,也就是注释①的位置一开始写的是:
scanf("%s", s[i]);然后通过添加注释②位置的代码,观察中间输出才改了过来。
注释③位置一开始并没有
&& a[i][j-1] ==0没有对横向单词和竖向单词理解完全。
注释④处的%3d输出也是细节,需要对照样例观察,发现是三个单位右对齐的。
0 0
- UVa 232 Crossword Answers (纵横字谜的答案)
- 纵横字谜的答案(Crossword Answers)
- 纵横字谜的答案(Crossword Answers UVa232)
- 小紫书 习题 3-6(UVA 232) 纵横字谜的答案(Crossword Answers)
- 习题3-6 纵横字谜的答案(Crossword Answers) UVa 232
- UVa 232 Crossword Answer(纵横字谜的答案)
- 纵横字谜的答案(Crossword Answer,ACM/ICPC WOrld Finals 1994, UVa 232)
- 《算法竞赛入门经典2ndEdition 》习题3-6 纵横字谜的答案(Crossword Answers, Uva232)
- 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)
- 纵横字谜的答案(uva 232)
- UVa 232 纵横字谜的答案
- 算法竞赛入门经典(第2版)习题3-6 纵横字谜的答案 Crossword Answers UVa232
- 算法竞赛入门经典-习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994,UVa232)
- 题解:纵横字谜的答案(UVa 232)
- 纵横字谜的答案
- 纵横字谜的答案
- 纵横字谜的答案
- 纵横字谜的答案 (UVa232)
- [leetcode] 132. Palindrome Partitioning II 解题报告
- 杭电OJ 4198(广搜+优先队列~)图搜.Quick out of the Harbour
- javascript返回上一级(页)的方式
- org.hibernate.exception.ConstraintViolationException: could not insert:
- socket select模型
- UVa 232 Crossword Answers (纵横字谜的答案)
- ZZULIOJ 1798: 戴姆勒的求助【数学】
- 去除UINavigationbar下边的黑线
- 最新Viking(维金)病毒专杀工具,纯VB编写。
- Cstyle的札记,Freertos内核详解,第4.3篇
- pfx证书提取公私钥的方法
- Linux 系统编程
- 【批量添加】-拼接sql字符串
- Java 多线程(二)线程间的通信应用--生产者消费者(未完)