https://www.acmicpc.net/problem/1926
1926번: 그림
어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로
www.acmicpc.net
#include <bits/stdc++.h>
int n, m;
int map[500][500];
bool visit[500][500];
int cnt;
int maxArea;
const int dy[] = {-1, 1, 0, 0};
const int dx[] = {0, 0, -1, 1};
int getArea(int r, int c){
std::queue<std::pair<int, int >> q;
q.push({r, c});
visit[r][c] = true;
int area = 1;
while(!q.empty()){
auto [y, x] = q.front(); q.pop();
for (int dir = 0; dir < 4; ++dir){
int ny = y + dy[dir];
int nx = x + dx[dir];
if (ny < 0 || ny >= n || nx < 0 || nx >= m) continue;
if (map[ny][nx] == 0 || visit[ny][nx]) continue;
q.push({ny, nx});
visit[ny][nx] = true;
++area;
}
}
return area;
}
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> m;
for (int y = 0; y < n; ++y){
for (int x = 0; x < m; ++x){
std::cin >> map[y][x];
}
}
for (int y = 0; y < n; ++y){
for (int x = 0; x < m; ++x){
if (map[y][x] == 1 && !visit[y][x]){
++cnt;
int area = getArea(y, x);
maxArea = std::max(maxArea, area);
}
}
}
std::cout << cnt << "\n" << maxArea << "\n";
return 0;
}
'백준 문제풀이 > BFS, DFS' 카테고리의 다른 글
[C++] 백준 문제풀이 (BFS) 16953번 A → B (0) | 2023.05.30 |
---|---|
[C++] 백준 문제풀이 (BFS) 4963번 섬의 개수 (0) | 2023.05.30 |
[C++] 백준 문제풀이 (BFS) 2178번 미로탐색 (0) | 2023.05.26 |