반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 14502 연구소 본문

백준(Baekjoon) 문제

백준 14502 연구소

huiung 2019. 4. 28. 14:31
반응형

https://www.acmicpc.net/problem/14502

문제와 채점은 위 사이트에서 확인 하실 수 있습니다.

 

연구소에 벽이 있고 바이러스들이 존재할때 바이러스가 상하좌우로 퍼져 나갑니다. 이때 벽을 3개를 추가 시킬 수 있는데 바이러스가 퍼지지 않는 영역의 최대를 구하는 문제입니다. 연구소 크기가 최고 8*8이므로 그냥 벽이 없는 곳중에 3곳을 찾아 벽을 세우고 그 배열을 대상으로 bfs를 해서 안전영역을 구하면 되는 문제입니다.

 

재귀 함수를 통해 벽 3개를 추가 시켜주고 거기서 bfs를 통해 바이러스를 퍼트려 주면 됩니다.

 

다음은 코드입니다.

 

#include <iostream>
#include <queue>
using namespace std;

int arr[8][8];
queue<pair<int, int>> q;
int N,M;
int nextx[4] = {1, 0, -1, 0};
int nexty[4] = {0, 1, 0, -1};
int maxnum;

void bfs(int (*arr)[8]) {
	
	int carr[8][8];
	int num = 0;
	
	for(int i = 0; i < N; i++)
		for(int j = 0; j < M; j++) {
			carr[i][j] = arr[i][j];
			
			if(arr[i][j] == 2)
				q.push(make_pair(i, j));
		}
		
		
	while(!q.empty()) {
		int xx = q.front().first;
		int yy = q.front().second;
		
		for(int i = 0; i < 4; i++) {
			int x = xx + nextx[i];
			int y = yy + nexty[i];
			
			if(x < 0 || x > N-1 || y < 0 || y > M-1 || carr[x][y] != 0)
				continue;
			
			carr[x][y] = 2;
			q.push(make_pair(x, y));	
		}
		q.pop();
	}
	
	for(int i = 0; i < N; i++)
		for(int j = 0; j < M; j++)
			if(carr[i][j] == 0)
				num++;
	
	maxnum = max(maxnum, num);
	return;
}

void dfs(int x, int y, int n) { // 벽세울 위치 찾는 재귀함수 
	
	if(n == 3) {
		bfs(arr);
		return;
	}
	
	for(int i = x; i < N; i++)
		for(int j = y; j < M; j++)
			if(arr[i][j] == 0) {
				arr[i][j] = 1;
				dfs(x, y, n+1);
				arr[i][j] = 0;
			}
}

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	cin >> N >> M;
	
	for(int i = 0; i < N; i++)
		for(int j = 0; j < M; j++)
			cin >> arr[i][j];
			
	dfs(0, 0, 0);
	
	cout<<maxnum;
	return 0;
}
반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 3190 뱀  (0) 2019.05.03
백준 14503 로봇 청소기  (0) 2019.04.30
백준 13460 구슬 탈출2  (0) 2019.04.27
백준 2263 트리의 순회  (0) 2019.04.20
백준 3163 떨어지는 개미  (0) 2019.04.20