[题目描述]
[题目分析]
简单的模拟,注意细节
[AC代码]
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<climits>
#include<cctype>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
const int INF=0x3f3f3f3f;
const int MAXN=15;
int r,c,tot;
char s[MAXN][MAXN];
int num[MAXN][MAXN];
bool vis[MAXN][MAXN];
int Case=0;
int main()
{
int u,v;
while(~scanf("%d",&r) && r)
{
tot=0;
memset(num,0,sizeof(num));
scanf("%d",&c);
for(int i=0;i<r;i++)
{
scanf("%s",s[i]);
}
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
u=i; v=j;
if(s[u][v]=='*') continue;
if(u-1<0 || v-1<0 || s[u-1][v]=='*' || s[u][v-1]=='*')
{
num[u][v]=++tot;
}
}
}
if(Case) printf("\n");
printf("puzzle #%d:\n",++Case);
printf("Across\n");
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(num[i][j])
{
printf("%3d.",num[i][j]);
v=j;
while(v<c && s[i][v]!='*')
{
printf("%c",s[i][v]);
v++;
}
printf("\n");
j=v;
}
}
}
memset(vis,0,sizeof(vis));
printf("Down\n");
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(num[i][j] && !vis[i][j])
{
printf("%3d.",num[i][j]);
u=i;
while(u<r && s[u][j]!='*')
{
vis[u][j]=true;
printf("%c",s[u][j]);
u++;
}
printf("\n");
}
}
}
}
return 0;
}