个人感觉这是一道比较难ac的题,有很多细节需要处理,比如输出格式等
但思路简单,这里给出代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char buf[12][12];
int num[12][12];
int r,c;
int p=1; //序号
while(scanf("%d",&r) && r!=0)
{
scanf("%d",&c);
memset(num,0,sizeof(num));
for(int i=0;i<r;++i)
scanf("%s",buf[i]);
int m=1;
for(int i=0;i<r;++i)
{
for(int j=0;j<c;++j)
{
if(buf[i][j]=='*')
continue;
if((j-1)<0 || buf[i][j-1]=='*' || (i-1)<0 || buf[i-1][j]=='*')
{
num[i][j]=m++;
}
}
} if(p!=1)
cout<<endl;
printf("puzzle #%d:\n",p++);
printf("Across\n");
for(int i=0;i<r;++i)
{
int j=0;
while(j<c)
{
if(num[i][j] == 0)
{
j++;
continue;
}
cout<<setw(3)<<setfill(' ')<<num[i][j]<<"."<<buf[i][j];
j++;
while(j<c && buf[i][j]!='*')
{
printf("%c",buf[i][j]);
j++;
}
printf("\n");
}
}
printf("Down\n");
for(int i=0;i<r;++i)
{
for(int j=0;j<c;++j)
{
if(num[i][j] == 0)
continue;
cout<<setw(3)<<setfill(' ')<<num[i][j]<<"."<<buf[i][j];
num[i][j]=0;
int k=i+1;
while(k<r && buf[k][j]!='*')
{
printf("%c",buf[k][j]);
num[k][j]=0;
k++;
}
printf("\n");
}
}
}
return 0;
}