这题深搜和宽搜都可以,感觉最贱的是最后输入的"_" input 输入几个下划线,output输出几个,好吧我没看清题wa 了3次
dfs:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 81
char map[31][81];
int d[4][2] = { {1, 0}, {-1, 0}, {0, 1}, {0, -1} };
int startx, starty, maxlen[31], max;
char last[81];
void output( void )
{
int i, j;
for( i = 0; i < max; i++ )
{
for( j = 0; j < maxlen[i]; j++ )
printf( "%c", map[i][j] );
printf( "\n" );
}
puts( last );
};
void input( void )
{
char temp[81];
int i, j, len, x;
i = 0;
while( gets(temp) )
{
if( temp[0] == '_' )
{
for( x = 0; x < strlen(temp); x++ )
last[x] = '_';
last[x] = '\0';
break;
}
len = strlen( temp );
maxlen[i] = len;
for( j = 0; j < len; j++ )
{
if( temp[j] == '*' )
{
startx = i;
starty = j;
}
map[i][j] = temp[j];
}
i++;
}
max = i;
}
void dfs( int x, int y )
{
int i;
for( i = 0; i < 4; i++ )
{
int xx = x + d[i][0];
int yy = y + d[i][1];
if( map[xx][yy] == ' ' )
{
map[xx][yy] = '#';
dfs(xx, yy);
}
}
if( map[x][y] == ' ' || map[x][y] == '*' )
{
map[x][y] = '#';
for( i = 0; i < 4; i++ )
dfs( x+d[i][0], y+d[i][1] );
}
else
return;
};
int main()
{
char temp[81];
int t, len, i, j;
scanf( "%d\n", &t );
while( t-- )
{
memset( map, -1, sizeof(map) );
input();
dfs( startx, starty );
output();
}
return 0;
}