티스토리 뷰

알고리즘/BOJ

[BOJ 2583] 영역 구하기

히더 2018. 7. 14. 19:50

출처 : https://www.acmicpc.net/problem/2583


1. 입력을 받아 바로 배열에 표시를 한다.

2. 비어있는 부분을 dfs를 돈다.

3. 총 dfs를 시작한 개수와 넓이를 저장하여 출력한다.


#include <iostream>

#include <algorithm>

using namespace std;


int M, N, K, cnt;

int map[100][100];

bool visited[100][100];

int result[10000];

int dir[4][2] = { {0,1},{0,-1},{1,0},{-1,0} };


void dfs(int i, int j)

{

visited[i][j] = true; cnt++;

for (int d = 0; d < 4; d++)

{

int nexti = i + dir[d][0]; int nextj = j + dir[d][1];

if (nexti >= 0 && nextj >= 0 && nexti < M && nextj < N

&& map[nexti][nextj] == 0 && !visited[nexti][nextj]) dfs(nexti, nextj);

}

}


int main()

{

cin >> M >> N >> K; cnt = 0; int z = 0;

for (int i = 0; i < K; i++)

{

int yy1, xx1, yy2, xx2;

cin >> xx1 >> yy1 >> xx2 >> yy2;

for (int i = yy1;i < yy2;i++) for (int j = xx1;j < xx2;j++) map[i][j] = 1;

}


for (int i = 0; i < M;i++)

{

for (int j = 0; j < N; j++)

{

if (map[i][j] == 0 && !visited[i][j])

{

dfs(i, j);


result[z] = cnt;

cnt = 0; z++;

}

}

}


sort(result, result + (++z));

cout << z << endl;

for (int i = 1; i < z; i++)

{

cout << result[i] << " ";

}


return 0;

}

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ 14502] 연구소  (0) 2018.07.15
[BOJ 9205] 맥주 마시면서 걸어가기  (0) 2018.07.15
[BOJ 2573] 빙산  (0) 2018.07.08
[BOJ 15684] 사다리 조작  (0) 2018.07.06
[BOJ 2638] 치즈  (0) 2018.07.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함