#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int r,c;
char a[11][11];
int b[11][11];
int main()
{
int pcnt=1;
while(scanf("%d",&r) && r)
{
scanf("%d",&c);
int cnt=1; //记录编号
memset(b,0,sizeof(b));
for(int i=0;i<r;i++)
{
scanf("%s",a[i]);
}
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(a[i][j]=='*')
b[i][j]=-1;
}
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
if((b[i][j]!=-1) &&((j==0) || (b[i][j-1]==-1) || (i==0) || (b[i-1][j]==-1)))
b[i][j] = cnt++;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
printf("%c",a[i][j]);
printf("\n");
}
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
printf("%3d",b[i][j]);
printf("\n");
}
int cnnt=1; //cnnt记录当前需要输出的
printf("puzzle #%d:\nAcross\n",pcnt++);
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(b[i][j]>0)
{
printf("%d.",b[i][j]);
while(j<c && b[i][j]!=-1)
{
printf("%c",a[i][j++]);
}
printf("\n");
}
}
printf("Down\n");
for(int i=0;i<r;i++)
for(int j=0;j<c;j++)
{
if(b[i][j]>0)
{
int i0=i;
printf("%d.",b[i][j]);
while(i0<r && b[i0][j]!=-1)
{
b[i0][j]=0;//用来控制已经输出过多字符不能作为起始字符
printf("%c",a[i0++][j]);
}
printf("\n");
}
}
printf("\n");
}
return 0;
}
UVa 232 Crossword Answers
最新推荐文章于 2020-10-04 18:55:20 发布