318 char cowhide[55][55]{};
319 bool occupy[55][55]{};
320 auto edge = unordered_set<point, pointhash, pointequal>();
326 for(
int i = 0; i < n; i++) {
327 for(
int j = 0; j < m; j++) {
328 cin >> cowhide[i][j];
329 if(flag && cowhide[i][j] ==
'X') {
334 occupy[i][j] =
false;
339 flood(first, occupy, &edge, cowhide, n, m);
342 auto nextedge = unordered_set<point, pointhash, pointequal>();
344 for(
const auto p: edge) {
346 point(p.x + 1, p.y), point(p.x - 1, p.y), point(p.x, p.y + 1),
347 point(p.x, p.y - 1)};
348 for(
auto next: nexts) {
349 if(0 <= next.x && next.x <= n && 0 <= next.y && next.y <= m && !occupy[next.x][next.y]) {
350 if(cowhide[next.x][next.y] ==
'X') {
354 cowhide[next.x][next.y] =
'X';
355 occupy[next.x][next.y] =
true;
356 nextedge.insert(next);
362 nextedge = unordered_set<point, pointhash, pointequal>();
void flood(point first, bool occupy[55][55], unordered_set< point, pointhash, pointequal > *edge, char cowhide[55][55], int n, int m)