1、简单的dfs,有两点需要注意,一点是最后的横线不一定和最后的X个数相等,我就是想当然,WA了一次。
2、另一点就是注意不要把'\0'填充到样例中空白的地方,'\0’虽然不可见但毕竟是字符。
#include <cstdio>
#include <cstring>
using namespace std;
int n,i,j,h,w,temp;
char a[40][100];
char s[100];
void dfs(int x,int y)
{
if(x<0||x>=h||y<0||y>=w)
return;
if(a[x][y]==' '||a[x][y]=='*')
{
a[x][y]='#';
dfs(x-1,y-1);dfs(x-1,y);dfs(x-1,y+1);
dfs(x,y-1); dfs(x,y+1);
dfs(x+1,y-1);dfs(x+1,y);dfs(x+1,y+1);
}
return;
}
void init(void)
{
while(s[w]!='\n')
{
a[h][w]=s[w];
w++;
}
if(w>temp)
temp=w;
h++;w=0;
}
void print(void)
{
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
{
if(a[i][j]!='\0')
printf("%c",a[i][j]);
else break;
}
printf("\n");
}
printf("%s",s);
}
int main(void)
{
//freopen("a.txt","r",stdin);
scanf("%d\n",&n);
while(n--)
{
memset(s,'\0',sizeof(s));
memset(a,'\0',sizeof(a));
h=w=temp=0;
while(fgets(s,100,stdin)!=NULL)
{
if(s[0]=='_')
{
w=temp;
for(i=0;i<h;i++)
for(j=0;j<w;j++)
{
if(a[i][j]=='*')
dfs(i,j);
}
break;
}
init();
}
print();
}
return 0;
}