代码又是挺乱的,时间太紧没空整理,思路也不好~但能AC……
看不清楚可以留言,或者加qq一起探讨
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char s[11][11];
int num[11][11];
int vis[11][11];
int main()
{
int r,c;
int t=0;
while(scanf("%d",&r)!=EOF)
{
if(r==0)
break;
t++;
scanf("%d",&c);
for(int i=0;i<r;i++)
{
scanf("%s",s[i]);
}
//编号;
memset(num,0,sizeof(num));
memset(vis,0,sizeof(vis));
int t1=0;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(s[i][j]!='*')
{
if(i==0)
{
num[i][j]=++t1;
}
else if(j==0)
{
num[i][j]=++t1;
}
else if(s[i][j-1]=='*'||s[i-1][j]=='*')
{
num[i][j]=++t1;
}
}
}
}
// for(int i=0;i<r;i++)
// {
// for(int j=0;j<c;j++)
// {
// printf("%d",num[i][j]);
// }
// printf("\n");
// }
//输出;
if(t!=1)
printf("\n");
printf("puzzle #%d:\n",t);
printf("Across\n");
int flag=0;
int cnt1=0;
int flag1=1;
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(s[i][j]=='*'&&flag)
{
flag=0;
printf("\n");
}
if(s[i][j]!='*')
{
if(num[i][j]!=0)
{
if(i==0&&num[i][j-1]==0)
printf("%3d.",num[i][j]);
else if(i!=0&&(j==0||s[i][j-1]=='*'))
printf("%3d.",num[i][j]);
}
if(j==c-1)
{
printf("%c\n",s[i][j]);
flag=0;
}
else
{
printf("%c",s[i][j]);
flag=1;
}
}
}
}
printf("Down\n");
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
if(num[i][j]!=0)
{
if(i==0)
printf("%3d.",num[i][j]);
else if(s[i-1][j]=='*')
printf("%3d.",num[i][j]);
}
if(s[i][j]!='*'&&!vis[i][j])
{
for(int k=i;s[k][j]!='*'&&k<r;k++)
{
vis[k][j]=1;
printf("%c",s[k][j]);
}
printf("\n");
}
}
}
}
return 0;
}