-
2667번 단지번호붙이기 | DFS | Baekjoon BOJ 백준 2667 C++ 코드, 해설, 풀이[백준 알고리즘]/[C++] 2021. 1. 30. 10:47728x90반응형
이번 포스팅은 백준 2667번 단지번호붙이기입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
기본 알고리즘
DFS 깊이우선탐색
참고
변수 설명
label: 단지 번호
v: 단지에 속하는 집 수 저장 벡터
house: 단지에 속하는 집 수전체 코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667//백준2667 단지번호붙이기#include <iostream>#include <vector>#include <algorithm>#include <string>using namespace std;const int MAX = 25;int N;int map[MAX][MAX] = { 0, };bool visited[MAX][MAX] = { 0, };int dy[] = { 0,0,1,-1 };int dx[] = { 1,-1,0,0 };int label = 1;vector<int> v;int house = 0;void DFS(int y, int x) {visited[y][x] = true;map[y][x] = label;house++;for (int i = 0; i < 4; i++) {int nx = x + dx[i];int ny = y + dy[i];if (nx < 0 || ny < 0 || nx >= N || ny >= N)continue;if (map[ny][nx] == 1 && visited[ny][nx] == 0) {DFS(ny, nx);}}}int main() {cin >> N;for (int i = 0; i < N; i++) {string input;cin >> input;for (int j = 0; j < N; j++) {map[i][j] = input.at(j) - '0';}}for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {if (map[i][j] == 1 && visited[i][j] == 0) {DFS(i, j);label++;v.push_back(house);house = 0;}}}sort(v.begin(), v.end());cout << label-1 << endl;for (int i = 0; i < v.size(); i++) {cout << v[i] << endl;}}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
4936번 섬의 개수 | DFS | Baekjoon BOJ 백준 4936 C++ 코드, 해설, 풀이 (0) 2021.01.30 11724번 연결 요소의 개수 | DFS, BFS | Baekjoon BOJ 백준 11724 C++ 코드, 해설, 풀이 (0) 2021.01.30 1012번 유기농 배추 | DFS | Baekjoon BOJ 백준 1012 C++ 코드, 해설, 풀이 (1) 2021.01.29 1110번 더하기 사이클 | Baekjoon BOJ 백준 1110 C++ 코드, 해설, 풀이 (0) 2021.01.28 2606번 바이러스 | BFS 너비우선탐색 | Baekjoon 백준 2606 C++ 코드, 해설, 풀이 (1) 2021.01.27