染色问题,其实就是看看图上某一点能扩散多少。
用DFS解决,因为BFS不是很熟 =-=。。。以后要多练。
提交后32ms,优化了一下,在递归前进行判定,优化到22ms,不是优化的很好。。。
代码:
#include <cstdio> #include <cstdlib> #include <cstring> char maze[31][81]; void dfs(int x, int y) { maze[x][y] = '#'; if (maze[x - 1][y] == ' ') dfs(x - 1, y); if (maze[x][y - 1] == ' ') dfs(x, y - 1); if (maze[x + 1][y] == ' ') dfs(x + 1, y); if (maze[x][y + 1] == ' ') dfs(x, y + 1); } int main() { int n; // freopen("in", "r", stdin); scanf("%d", &n); gets(maze[0]); while (n--) { int i = 0; while (gets(maze[i]) && maze[i][0] != '_') { i++; }//input bool flag = true; for (int k = 0; k < i; k++) for (int j = 0; flag && j < strlen(maze[k]); j++) if (maze[k][j] == '*') { maze[k][j] = '#'; dfs(k, j); // printf("%d %d ", k, j); flag = false; } // printf("%d %d ", i, flag); for (int k = 0; k <= i; k++) puts(maze[k]); }//while }