[백준] 4963. 섬의 개수

고재욱·2021년 10월 11일

Baekjoon

목록 보기
32/35

❓ 문제 ❓
섬의 개수

💯 문제 풀이💯
BFS 방식으로 접근했다.
큐에 들리지 않은 땅을 넣으면서 섬의 개수를 파악한다.

#include <iostream>
#include <queue>
using namespace std;
int dirx[8] = { 1,1,0,-1,-1,-1,0,1 };
int diry[8] = { 0,1,1,1,0,-1,-1,-1 };
int map[51][51];
bool visit[51][51];
int main() {
	while (1) {
		int w, h;
		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 && !visit[i][j]) {
					cnt++;
					visit[i][j] = true;
					queue<pair<int, int>> q;
					q.push({ i,j });
					while (!q.empty()) {
						int y = q.front().first;
						int x = q.front().second;
						q.pop();
						for (int k = 0; k < 8; k++) {
							int movey = y + diry[k], movex = x + dirx[k];
							if (movey >= 0 && movex >= 0 && movey < h && movex < w && !visit[movey][movex] && map[movey][movex] == 1) {
								visit[movey][movex] = true;
								q.push({ movey,movex });
							}
						}
					}
				}
			}
		}
		cout << cnt << "\n";
		for (int i = 0; i < h; i++)
			for (int j = 0; j < w; j++)
				visit[i][j] = false;

	}
}

0개의 댓글