UVa 232 - Crossword Answers

题目: 给你一个二维的字符表,里面有一些字母和*,*和边界都当做是分隔符,

             按照图示方式编号连续位置(从上到下,从左到右)生成单词,输出所有横向和竖向单词。

分析:字符串。先按照顺序求出每个方格的编号,除单词开头字母外,其他都是0;

             然后,横向和总线扫描单词输出即可;(纵向的要先排序在输出)

说明:1.注意要按照顺序输出结果,2连续输出间有一个空行。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

typedef struct _node
{
	int  id;
	char str[12];
}node;

node data[101];
char maps[12][12];
int  size[12][12];

int cmp(node a, node b)
{
	return a.id < b.id;
}

int main()
{
	int row,column,times = 1;
	while (cin >> row && row) {
		cin >> column;
		for (int i = 0; i < row; ++ i)
			cin >> maps[i];
		int id = 1;
		for (int i = 0; i < row; ++ i)
			for (int j = 0; j < column; ++ j)
				if (maps[i][j] != '*' && (!i || !j || maps[i-1][j] == '*' || maps[i][j-1] == '*'))
					size[i][j] = id ++;
				else size[i][j] = 0;
		
		if  (times > 1) printf("\n");
		printf("puzzle #%d:\n",times ++);
		printf("Across\n");
		for (int i = 0; i < row; ++ i) {
			int move = 0;
			while (move < column) {
				if (size[i][move]) {
					printf("%3d.",size[i][move]);
					int save = 0;
					while (move < column && maps[i][move] != '*')
						printf("%c",maps[i][move ++]);
					printf("\n");
				}else move ++;
			}
		}
		
		printf("Down\n");
		int count = 0;
		for (int i = 0; i < column; ++ i) {
			int move = 0;
			while (move < row) {
				if (size[move][i]) {
					data[count].id = size[move][i];
					int save = 0;
					while (move < row && maps[move][i] != '*')
						data[count].str[save ++] = maps[move ++][i];
					data[count ++].str[save ++] = 0;
				}else move ++;
			}
		}
		sort(data, data+count, cmp);
		for (int i = 0; i < count; ++ i)
			printf("%3d.%s\n",data[i].id, data[i].str);
	}
    return 0;
}


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值