반응형
포인트
1. BFS 너비 우선 탐색 (최대 넓이, 영역의 수, ~ )
#include <vector>
#include <queue>
#include <tuple>
using namespace std;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
bool visited[100][100];
// 전형적인 BFS 문제
int bfs(int a, int b, int m, int n, vector<vector<int>> map)
{
queue<pair<int, int>> q;
q.push(make_pair(a, b));
visited[a][b] = true;
int color = map[a][b];
int cnt = 1;
while (!q.empty())
{
int x, y;
tie(x, y) = q.front();
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 >= m || ny >= n)
continue;
if (map[nx][ny] == color && !visited[nx][ny])
{
cnt++;
visited[nx][ny] = true;
q.push(make_pair(nx, ny));
}
}
}
return cnt; // 방의 넓이를 나타냄
}
vector<int> solution(int m, int n, vector<vector<int>> picture)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
visited[i][j] = false;
}
} //input
int room = 0;
int value = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (picture[i][j] != 0 && visited[i][j] == false)
{
room++; // 영역의 수를 나타냄
value = max(value, bfs(i, j, m, n, picture)); // 최대값을 구하는 문제
}
}
}
vector<int> answer = {room, value};
return answer;
}
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] 구명 보트 (0) | 2020.09.23 |
---|---|
[알고리즘] cpp 소수 찾기 (0) | 2020.09.23 |
[알고리즘] 기능 개발 (0) | 2020.09.23 |
[알고리즘] 프린터 (0) | 2020.09.23 |
[알고리즘] c++ cpp java 주식가격 (0) | 2020.09.23 |
댓글