标签:
题目: 给你一个二维的字符表,里面有一些字母和*,*和边界都当做是分隔符,
按照图示方式编号连续位置(从上到下,从左到右)生成单词,输出所有横向和竖向单词。
分析:字符串。先按照顺序求出每个方格的编号,除单词开头字母外,其他都是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; }
标签:
原文地址:http://blog.csdn.net/mobius_strip/article/details/46492999