简单DFS,只需在回溯的时候,把末端的.换成X即可
#include <stdio.h> int x, y, k; char jz[1000][1000],vis[1000][1000]; void dfs(int a,int b) { int t[4] = { 0, 0, -1, 1 }; for (int i = 0; i < 4; i++){ int j = 3 - i; if ((a + t[i]) >= 0 && (b + t[j]) >= 0 && jz[a + t[i]][b + t[j]] == '.'&&!vis[a + t[i]][b + t[j]]){ vis[a + t[i]][b + t[j]] = 1; dfs(a + t[i], b + t[j]); if (k){ k--; jz[a + t[i]][b + t[j]] = 'X'; } } } } int main() { scanf("%d%d%d", &x, &y, &k); for (int i = 0; i < x; i++){ getchar(); for (int j = 0; j < y; j++) scanf("%c", &jz[i][j]); } for (int i = 0; i < x;i++) for (int j = 0; j < y;j++) if (jz[i][j] == '.'){ vis[i][j] = 1; dfs(i, j); } for (int i = 0; i < x; i++) printf("%s\n", jz[i]); return 0; }