https://www.acmicpc.net/problem/1303
코드
#include <iostream>
#include <cmath>
#include <queue>
#include <cstring>
#define MAX 101
#define X first
#define Y second
using namespace std;
char board[MAX][MAX];
bool visited[MAX][MAX];
int dx[] = { 1, -1, 0, 0 };
int dy[] = { 0, 0, -1, 1 };
int N, M; // 가로, 세로
char color; // 병사의 옷 색
int white, blue, cnt; // 해당 색상 병사의 위력, 병사의 수
queue<pair<int, int>> q;
int Bfs(int x, int y, char color)
{
cnt = 1;
q.push({ x, y });
visited[x][y] = true;
while (!q.empty())
{
pair<int, int> cur = q.front();
q.pop();
for (int i = 0; i < 4; i++)
{
int nx = cur.X + dx[i];
int ny = cur.Y + dy[i];
if (nx < 0 || nx >= M || ny < 0 || ny >= N) continue;
if (board[nx][ny] != color || visited[nx][ny]) continue;
q.push({ nx, ny });
visited[nx][ny] = true;
cnt++;
}
}
// 병사의 수를 제곱하여 위력을 구하여 반환
int power = pow(cnt, 2);
return power;
}
int main()
{
cin >> N >> M;
for (int i = 0; i < M; i++)
{
cin >> board[i];
}
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
if (board[i][j] == 'W' && !visited[i][j])
{
color = board[i][j];
white += Bfs(i, j, color);
}
else if (board[i][j] == 'B' && !visited[i][j])
{
color = board[i][j];
blue += Bfs(i, j, color);
}
}
}
cout << white << ' ' << blue;
}
'C++ > BFS, DFS' 카테고리의 다른 글
[C++] 백준 5014 - 스타트 링크 (0) | 2022.12.06 |
---|---|
[c++] 백준 2468 - 안전 영역 (1) | 2022.12.06 |
[C++] 백준 10026 - 적록색약 (0) | 2022.12.05 |
[C++] 백준 1012 - 유기농 배추 (1) | 2022.11.30 |
[C++] 백준 1260 - BFS와 DFS (0) | 2022.11.28 |