题就不复述了;
题解:这道题挺好写的,暴力就行了,输出输出比较个性,输出的序号要占三个格,忽视这个为wa到哭的;
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char a[15][15];
int b[15][15];
int main()
{
int m, n;
int kase=0;
while(cin>>m && m)
{
if(kase) cout<<endl;
cin>>n;
for(int i=0; i<m; i++)
cin>>a[i];
int cnt=0;
memset(b, 0, sizeof(b));
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
if(i==0 && a[i][j]!='*') b[i][j]=++cnt;
else if(j==0 && a[i][j]!='*') b[i][j]=++cnt;
else if(i!=0 && j!=0 && a[i][j]!='*' && (a[i-1][j]=='*' || a[i][j-1]=='*')) b[i][j]=++cnt;
}
printf("puzzle #%d:\n",++kase);
printf("Across\n");
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
if(b[i][j])
{
if(j>0 && a[i][j-1]!='*') continue;
printf("%3d.",b[i][j]);
int x=i, y=j;
while(1)
{
cout<<a[x][y];
y++;
if(y>=n || a[x][y]=='*') { cout<<endl; break; }
}
}
}
printf("Down\n");
for(int i=0; i<m; i++)
for(int j=0; j<n; j++)
{
if(b[i][j])
{
if(i>0 && a[i-1][j]!='*') continue;
printf("%3d.",b[i][j]);
int x=i, y=j;
while(1)
{
cout<<a[x][y];
x++;
if(x>=m || a[x][y]=='*') { cout<<endl; break; }
}
}
}
}
return 0;
}