简单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;
}