题目大意:走迷宫,X 是墙,将 * 能够移动到的范围都用 # 表示然后输出。
解题思路:同样的思路,单层 dfs,碰到墙壁 X 返回,# 说明已遍历,返回,其余就剩空格用 # 覆盖。最后记得把初始位置也置为 #。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
char map[100][100];
int n;
void dfs(int r, int c) {
int len = strlen(map[r]);
if (r < 0 || r > n || c < 0 || c > len) return;
if (map[r][c] == 'X' || map[r][c] == '#') return;
map[r][c] = '#';
dfs(r-1, c);
dfs(r, c-1);
dfs(r, c+1);
dfs(r+1, c);
}
int main() {
int T;
scanf("%d", &T);
getchar();
while (T--) {
n = 0;
while(gets(map[n++])) if (map[n-1][0] == '_') break;
for (int i = 0; i < n; i++)
for (int j = 0; j < strlen(map[i]); j++) {
if (map[i][j] == '*') {
dfs(i, j);
map[i][j] = '#';
}
}
for (int i = 0; i < n; i++)
printf("%s\n", map[i]);
}
return 0;
}