模拟水题 Across时直接从左往右模拟
Down时记得要将上面以经用过的起始格抹去
#include<stdio.h>
#include<string.h>
char a[10][10];int b[10][10];
int main()
{
int c,r,i,j,k;int n=1;
while(~scanf("%d",&r)&&r!=0)
{ scanf("%d",&c);
getchar();int count=0;memset(b,0,sizeof(b));memset(a,0,sizeof(a));
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
a[i][j]=getchar();
}
getchar();
}
int m=1;
for(i=0;i<r;++i)
{
for(j=0;j<c;++j)
{
if(a[i][j]=='*')
continue;
if((j-1)<0 || a[i][j-1]=='*' || (i-1)<0 || a[i-1][j]=='*')
{
b[i][j]=m++;
}
}
}
if(n>1) printf("\n");
printf("puzzle #%d:\n",n++);
printf("Across\n");
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(b[i][j]!=0)
{
printf("%3d.%c",b[i][j],a[i][j]);
for(k=j+1;k<c&&a[i][k]!='*';k++)
{
printf("%c",a[i][k]);
}
j=k-1;
printf("\n");
}
}
}
printf("Down\n");
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
if(b[i][j]!=0)
{
printf("%3d.%c",b[i][j],a[i][j]);
for(k=i+1;k<r&&a[k][j]!='*';k++)
{
printf("%c",a[k][j]);
b[k][j]=0;
}
printf("\n");
}
}
}
}
}