-
백준 2583 영역 구하기 | BFS | C++[백준 알고리즘]/[C++] 2021. 3. 11. 13:30728x90반응형
이번 포스팅은 백준 2583번 영역 구하기입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
BFS (너비 우선 탐색)
전체 코드
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374//백준2583 영역구하기#include <iostream>#include <queue>#include <vector>#include <algorithm>using namespace std;int M, N, K;const int MAX = 101;int map[MAX][MAX];bool visited[MAX][MAX];queue<pair<int, int>> q;int dy[] = { 0,0,-1,1 };int dx[] = { -1,1,0,0 };vector<int> v;int s = 1;void BFS(int y, int x) {visited[y][x] = true;q.push(make_pair(y, x));while (!q.empty()) {y = q.front().first;x = q.front().second;q.pop();for (int i = 0; i < 4; i++) {int ny = y + dy[i];int nx = x + dx[i];if (ny<0 || nx<0 || ny>=M || nx>=N)continue;if (map[ny][nx] == 0 && !visited[ny][nx]) {visited[ny][nx] = true;q.push(make_pair(ny, nx));s++;}}}}int main() {cin >> M >> N >> K;int x1, y1, x2, y2;while (K--) {cin >> x1 >> y1 >> x2 >> y2;for (int i = M-y2; i < M-y1; i++) {for (int j = x1; j < x2; 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]) {BFS(i, j);v.push_back(s);s = 1;}}}sort(v.begin(), v.end());cout << v.size() << endl;for (int i = 0; i < v.size(); i++) {cout << v[i] << " ";}}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
백준 2210 숫자판 점프 | DFS | C++ (0) 2021.03.12 백준 1620 나는야 포켓몬 마스터 이다솜 | C++ (0) 2021.03.11 1987번 알파벳 | DFS | 백준 5014 C++ 코드 (0) 2021.03.09 5014번 스타트링크 | BFS | 백준 5014 C++ 코드 (0) 2021.03.03 2589번 보물섬 | BFS | 백준 2589 C++ 코드 (1) 2021.03.03