紫书习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)
输入一个r行c列(1≤r,c≤10)的网格,黑格 用“*”表示,每个白格都填有一个字母。如果一个 白格的左边相邻位置或者上边相邻位置没有白格 (可能是黑格,也可能出了网格边界),则称这 个白格是一个起始格。 首先把所有起始格按照从上到下、从左到右 的顺序编号为1, 2, 3,…,如图所示。
接下来要找出所有横向单词(Across)。这 些单词必须从一个起始格开始,向右延伸到一个 黑格的左边或者整个网格的最右列。最后找出所 有竖向单词(Down)。这些单词必须从一个起 始格开始,向下延伸到一个黑格的上边或者整个 网格的最下行。输入输出格式和样例请参考原 题。
参考博客
#include<bits/stdc++.h>
using namespace std;
int main()
{
char tu[1000][10]; //存字母图,r>=1,n<=10,r行n列
int nu[10000][2]; //存数字标记。数组要开的足够大,能够放下所有字母!
int x=0,y=0,cnt=1; //x行y列,cnt计数
while(cin>>x && x!=0)
{
cin>>y;
getchar();
for(int i=0;i<x;i++)
for(int j=0;j<y;j++)
cin>>tu[i