14716번: 현수막
혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라.
www.acmicpc.net
그냥 전형적인 dfs/bfs문제였다. 섬 갯수 세는 문제와 매우 유사했다.
단, 4방향이 아닌 8방향을 고려하는 것만 조심하면 쉬운 문제였다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
queue<pair<int, int>> q;
int map[1000][250];
int ans, m, n;
int dx[8] = { -1,-1,-1,0,0,1,1,1 };
int dy[8] = { -1,0,1,-1,1,-1,0,1 };
void bfs(int x, int y) {
q.push({ x, y });
map[x][y] = 0;
while (!q.empty()) {
int a = q.front().first;
int b = q.front().second;
q.pop();
for (int i = 0; i < 8; i++) {
if (a + dx[i] >= 0 && a + dx[i] < m && b + dy[i] >= 0 && b + dy[i] < n
&& map[a + dx[i]][b + dy[i]] == 1) {
map[a + dx[i]][b + dy[i]] = 0;
q.push({ a + dx[i], b + dy[i] });
}
}
}
ans++;
return;
}
int main() {
cin >> m >> n;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (map[i][j] == 1) {
bfs(i, j);
}
}
}
cout << ans;
return 0;
}
'알고리즘 공부 > C++' 카테고리의 다른 글
[C++] 백준 9663번: N-Queen (0) | 2020.11.27 |
---|---|
[C++] 백준 17070번: 파이프 옮기기1 (0) | 2020.11.26 |
[C++] 백준 13549번: 숨바꼭질 3 (0) | 2020.11.25 |
[C++] 백준 1707번: 이분 그래프 (0) | 2020.11.24 |
[C++] 백준 1759번: 암호 만들기 (0) | 2020.11.10 |