题目:给你一个二维的迷宫,从’*‘出发把所有能走的点标记成‘#’。
分析:图论、搜索。直接利用floodfill处理即可。
说明:注意地图清空,因为地图不规则。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
char maps[50][100];
int dxy[4][2] = {0,1,1,0,-1,0,0,-1};
void dfs( int x, int y )
{
if ( maps[x][y] == '*' ) maps[x][y] = ' ';
if ( x < 0 || y < 0 || x >= 30 || y >= 80 || maps[x][y] != ' ' )
return;
maps[x][y] = '#';
for ( int i = 0 ; i < 4 ; ++ i )
dfs( x + dxy[i][0], y + dxy[i][1] );
}
int main()
{
int n;
scanf("%d",&n);
getchar();
while ( n -- ) {
memset( maps, 0, sizeof(maps) );
int count = 0;
do {
gets(maps[count ++]);
}while ( maps[count-1][0] != '_' );
for ( int i = 0 ; i < count ; ++ i )
for ( int j = 0 ; j < 80 ; ++ j )
if ( maps[i][j] == '*' )
dfs( i , j );
;
for ( int i = 0 ; i < count ; ++ i )
puts(maps[i]);
}
return 0;
}