UVa 232 Crossword Answers
来源:互联网 发布:mac os x10.7.5升级包 编辑:程序博客网 时间:2024/06/08 10:08
Problem Description
输入一个r行c列(1<=r, c<=10)的网格,黑格用“*”表示,每个白格都填有一个字母。如果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出了网格边界),则称这个白格是一个起始格。
首先把所有起始格按照从上到下、从左到右的顺序编号1,2,3……,
接下来要找出所有横向单词。这些单词必须从一个起始格开始,向右延伸到一个黑格的左边或者整个网格的最右列。最后找出所有竖向单词。这些档次必须从一个起始格开始,向下延伸到一个黑格的上边或者整个网格的最下行。
Sample Input
2 2
AT
*O
6 7
AIM*DEN
*ME*ONE
UPON*TO
SO*ERIN
SA*OR
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
代码:
#include<bits/stdc++.h>using namespace std;struct node{ int data; int num;};int main(){ int n, m; char s[15][15]; int i, j; node a[15][15]; int cas = 1; while(~scanf("%d", &n)) { if(!n) break;//为0退出循环 scanf("%d", &m); memset(a, 0, sizeof(a)); for(i = 0; i < n; i++)//n,m列 初始化结构体 { for(j = 0; j < m; j++) { a[i][j].data = 0; a[i][j].num = 0; } } for(i = 0; i < n; i++) { scanf("%s", s[i]);//输出n行 } int flag = 1;//起始点的编号 for(i = 0; i < n; i++) { for(j = 0; j < m; j++) { if(s[i][j] != '*') { if(i - 1 >= 0 && i - 1 < n)//上边有障碍物 //data为1 { if(s[i-1][j] == '*') { a[i][j].num = flag++; a[i][j].data = 1; } } else { a[i][j].num = flag++; a[i][j].data = 1; } if(j - 1 >= 0 && j - 1 < m)//左边有障碍物 //data 为3,如果左边上边都有data为2 { if(s[i][j - 1] == '*' && a[i][j].data) { a[i][j].data = 3; } else if(s[i][j - 1] == '*') { a[i][j].num = flag++; a[i][j].data = 2; } } else if(a[i][j].data) { a[i][j].data = 3; } else { a[i][j].num = flag++; a[i][j].data = 2; } } } } int k; if(cas != 1) printf("\n"); printf("puzzle #%d:\n", cas++); printf("Across\n");//横向 for(i = 0; i < n; i++) { for(j = 0; j < m; j++) { if(a[i][j].data == 2 || a[i][j].data == 3)//左边有障碍物 { printf("%3d.", a[i][j].num); for(k = j; k < m; k++) { if(s[i][k] != '*') printf("%c", s[i][k]); else break; } printf("\n"); } } } printf("Down\n"); for(i = 0; i < n; i++) { for(j = 0; j < m; j++) { if(a[i][j].data == 1 || a[i][j].data == 3)//上边有障碍物 { printf("%3d.", a[i][j].num); for(k = i; k < n; k++) { if(s[k][j] != '*') printf("%c", s[k][j]); else break; } printf("\n"); } } } }}
0 0
- uva 232 - Crossword Answers
- uva 232 - Crossword Answers
- UVa 232 - Crossword Answers
- UVa 232 - Crossword Answers
- UVa-232 - Crossword Answers
- Uva-232 - Crossword Answers
- uva---232--- Crossword Answers
- UVa 232 Crossword Answers
- UVa 232 - Crossword Answers
- UVa-232Crossword Answers
- 【Uva 232】 Crossword Answers
- UVa 232 Crossword Answers
- UVa 232 Crossword Answers
- UVA - 232 Crossword Answers
- Uva - 232 - Crossword Answers
- UVa 232 - Crossword Answers
- Uva 232 Crossword Answers
- UVA 232 Crossword Answers
- 一个使用高德地图SDK进行逆地理编码的例子
- 感恩你遇到的一切
- 1002. A+B for Polynomials (25)
- AndroidStdio-图片格式引发的异常
- 一维数组的存储类型 , a &a int(a) 的区别
- UVa 232 Crossword Answers
- shell
- opencv 2D直方图
- ListView+ SQLite实现商品展示
- Android:AS与Unity3D之间打包的各种坑及解决方案
- POJ
- IF脚本实现虚拟机的开启,关闭,重置,快照
- Hadoop2.x 让你真正明白yarn
- Android Arm Inline Hook