样例略微有点弱,写了个错误的代码但是水过去了,大佬有兴趣可以来hack下
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <math.h>
#include <functional>
#include <unordered_map>
#include <unordered_set>
#define ull unsigned long long
#define ll long long
#define pii pair<ll ,ll>
#define cy cout<<"YES"<<endl
#define cn cout<<"NO"<<endl
#define forn(i,begin,end,add) for(ll (i)=(begin);(i)<=(end);(i)+=(add)) //begin是i的起始,end是i的终止,add是每次加的大小
#define rforn(i,begin,end,sub) for(ll (i)=(end);(i)>=(begin);(i)-=(sub)) //r是倒序遍历
#define vv vector
#define inf32 INT32_MAX/2
#define inf64 INT64_MAX/2
#define LD double
#define PI acos(-1)
#define debug(a,b) cout<<a<<b
#define eps 1e-12
const int N = 4e5 + 100;
const int mod = 1e9 + 7;
ll T;
void solve() {
int n, m, k; cin >> n >> m >> k;
vv<string>area(n + 2);
forn(i, 0, m, 1)
area[0] += '#';
forn(i, 1, n, 1) {
cin >> area[i];
area[i] = '#' + area[i] + '#';
}
forn(i, 0, m, 1)
area[n + 1] += '#';
map<int, pii>mp;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
auto dfs = [&](int x, int y, auto&& dfs, int& now) {
if (area[x][y] != '.')
return;
area[x][y] = '1';
now++;
forn(i, 0, 3, 1)
dfs(x + dx[i], y + dy[i], dfs, now);
};
forn(i, 1, n, 1)
forn(j, 1, m, 1)
if (area[i][j] == '.') {
int now = 0;
dfs(i, j, dfs, now);
mp[now] = { i,j };
}
auto dfs2 = [&](int x, int y, auto&& dfs2, int& k)->int {
if (area[x][y] != '1')
return 0;
area[x][y] = '2';
int all = 0;
forn(i, 0, 3, 1) {
all += dfs2(x + dx[i], y + dy[i], dfs2, k);
}
if (all == 0 && k) {
area[x][y] = 'X';
k--;
return 0;
}
else {
return 1;
}
};
for (auto& a : mp) {
if (!k)
break;
dfs2(a.second.first, a.second.second, dfs2, k);
}
forn(i, 1, n, 1) {
forn(j, 1, m, 1) {
if (area[i][j] == '#')
cout << '#';
else if (area[i][j] == 'X')
cout << 'X';
else
cout << '.';
}
cout << endl;
}
cout << endl;
}
int main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
T = 1;
//cin >> T;
while (T--)
solve();
}