cgy12306
[백준 BoJ] 14502 - 연구소 본문
// https://www.acmicpc.net/problem/14502
// 연구소
#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;
int res = 0;
int N, M, map[9][9], tmp[9][9];
bool visited[9][9], vtmp[9][9];
int dx[] = {-1, 1 , 0, 0};
int dy[] = {0, 0, -1, 1};
vector<int> check;
vector<pair<int,int>> new_wall;
queue<pair<int, int>> q;
void print() {
cout << "\n";
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cout << tmp[i][j] <<" ";
}
cout << "\n";
}
}
void bfs(int x, int y) {
q.push(make_pair(x, y));
while (!q.empty()) {
//print();
x = q.front().first;
y = q.front().second;
vtmp[x][y] = true;
tmp[x][y] = 2;
q.pop();
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || ny < 0 || nx >= N || ny >= M) continue;
if (tmp[nx][ny] || vtmp[nx][ny]) continue;
vtmp[nx][ny] = true;
q.push(make_pair(nx, ny));
}
}
}
int count() {
int cnt = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (tmp[i][j] == 0) cnt++;
}
}
return cnt;
}
void brute_force() {
do {
memcpy(tmp, map, sizeof(map));
memcpy(vtmp, visited, sizeof(visited));
for (int i = 0; i < check.size(); i++) {
if (check[i]) {
tmp[new_wall[i].first][new_wall[i].second] = 1;
vtmp[new_wall[i].first][new_wall[i].second] = true;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (tmp[i][j] == 2 && !vtmp[i][j]) {
bfs(i, j);
}
}
}
res = max(count(), res);
} while (next_permutation(check.begin(), check.end()));
};
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N >> M;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> map[i][j];
if (map[i][j] == 0) {
new_wall.push_back(make_pair(i, j));
check.push_back(0);
}
}
}
for (int i = 0; i < 3; i++) check[i] = 1;
sort(check.begin(), check.end());
brute_force();
cout << res;
}
- Brute Force
'Algorithm > C++' 카테고리의 다른 글
[백준 BoJ] 17141 - 연구소 2 (0) | 2021.11.21 |
---|---|
[백준 BoJ] 3079 - 입국심사 (0) | 2021.10.23 |
[백준 BoJ] 15686 - 치킨 배달 (0) | 2021.10.23 |
[백준 BoJ] 14890 - 경사로 (0) | 2021.10.22 |
[백준 BoJ] 14499 - 주사위 굴리기 (0) | 2021.10.22 |
Comments