https://www.acmicpc.net/problem/2636
#include <iostream>
#include <cstring>
using namespace std;
struct MOVE { int x, y; };
MOVE mv[4] = { {1,0}, {-1,0}, {0,1}, {0,-1} };
const int MAX = 101;
int map[MAX][MAX];
int n, m;
int visited[MAX][MAX];
int ans;
int answer = 0;
bool isEmpty() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] == 1) {
return true;
}
}
}
return false;
}
void dfs(int ii, int jj) {
for (int k = 0; k < 4; k++) {
int movei = ii + mv[k].x;
int movej = jj + mv[k].y;
if (!(movei >= 0 && movei < n && movej >= 0 && movej < m)) continue;
if (visited[movei][movej] == 1) continue;
visited[movei][movej] = 1;
if (map[movei][movej] == 0) {
dfs(movei, movej);
}
else {
map[movei][movej] = 2;
}
}
}
void meltingcheese() {
memset(visited, -1, sizeof(visited));
visited[0][0] = 1;
dfs(0, 0);
ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (map[i][j] == 1 || map[i][j] == 2) ans++;
if (map[i][j] == 2) map[i][j] = 0;
}
}
}
int main(void) {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> map[i][j];
}
}
while (isEmpty()) {
meltingcheese();
answer++;
}
cout << answer << endl;
cout << ans << endl;
}
'백준 알고리즘 > 구현' 카테고리의 다른 글
로봇 시뮬레이션 C++ (0) | 2022.03.09 |
---|---|
스위치 켜고 끄기 (0) | 2022.03.08 |
마법사 상어와 토네이도 C++ (0) | 2022.02.15 |
마법사 상어와 비바라기 C++ (0) | 2022.02.05 |
마법사 상어와 블리자드 C++ (0) | 2022.02.03 |