-
4936번 섬의 개수 | DFS | Baekjoon BOJ 백준 4936 C++ 코드, 해설, 풀이[백준 알고리즘]/[C++] 2021. 1. 30. 14:27728x90반응형
이번 포스팅은 백준 4936번 섬의 개수입니다.
아래 url를 클릭하시면 백준 사이트에서 문제를 볼 수 있습니다.
4963번: 섬의 개수
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도
www.acmicpc.net
기본 알고리즘
DFS 깊이 우선 탐색
전체 코드
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667//백준4963 섬의 개수#include <iostream>using namespace std;const int MAX = 50;int w, h;int map[MAX][MAX];bool visited[MAX][MAX];int dy[] = {0,0,-1,1,-1,-1,1,1};int dx[] = {1,-1,0,0,-1,1,-1,1};void reset() {for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {map[i][j] = 0;visited[i][j] = 0;}}}void DFS(int y, int x) {visited[y][x] = true;for (int i = 0; i < 8; i++) {int ny = y + dy[i];int nx = x + dx[i];if (ny < 0 || nx < 0 || ny >= h || nx >= w)continue;if (map[ny][nx] == 1 && visited[ny][nx] == 0) {DFS(ny, nx);}}}int main() {while (true) {reset();cin >> w >> h;if (w == 0 && h == 0) {break;}for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {cin >> map[i][j];}}int cnt = 0;for (int i = 0; i < h; i++) {for (int j = 0; j < w; j++) {if (map[i][j] == 1 && visited[i][j] == 0) {DFS(i, j);cnt++;}}}cout << cnt << endl;}}cs 728x90반응형'[백준 알고리즘] > [C++]' 카테고리의 다른 글
1697번 숨바꼭질 | BFS | Baekjoon BOJ 백준 1697 C++ 코드, 해설, 풀이 (0) 2021.02.01 2178번 미로 탐색 | BFS | Baekjoon BOJ 백준 2178 C++ 코드, 해설, 풀이 (0) 2021.02.01 11724번 연결 요소의 개수 | DFS, BFS | Baekjoon BOJ 백준 11724 C++ 코드, 해설, 풀이 (0) 2021.01.30 2667번 단지번호붙이기 | DFS | Baekjoon BOJ 백준 2667 C++ 코드, 해설, 풀이 (0) 2021.01.30 1012번 유기농 배추 | DFS | Baekjoon BOJ 백준 1012 C++ 코드, 해설, 풀이 (1) 2021.01.29