섬의 개수

BiBi·2021년 2월 8일
0

코딩테스트연습

목록 보기
64/66
#include <iostream>
#include <queue>
#include <stdio.h>
#include <string>
#include <cmath>
#include <algorithm>

int arr[50][50];
int visited[50][50];
bool Done[50][50];
int dx[8] = { -1,1,0,0,-1,1,1,-1 };
int dy[8] = { 0,0,-1,1,1,-1,1,-1 };

int t, n;
std::vector<int> vec;
int w, h;

void bfs(int c, int r) {
	visited[c][r] = 1;
	for (int i = 0;i < 8;i++) {
		if (r + dx[i] >= 0 && r + dx[i] < w && c + dy[i] >= 0 && c + dy[i] < h) {
			if (arr[c + dy[i]][r + dx[i]] == 1 && visited[c + dy[i]][r + dx[i]] == 0) {

				bfs(c + dy[i], r + dx[i]);
			}
		}
	}

}



int main() {
	while (1) {
		scanf("%d %d", &w, &h);
		if (w == 0 && h == 0) {
			return 0;
		}
		for (int i = 0;i < h;i++) {
			for (int j = 0;j < w;j++) {
				arr[i][j] = 0;
				visited[i][j] = 0;
			}
		}

		for (int i = 0;i < h;i++) {
			for (int j = 0;j < w;j++) {
				scanf("%d", &arr[i][j]);
			}
		}
		int cnt = 0;
		for (int i = 0;i < h;i++) {
			for (int j = 0;j < w;j++) {
				if (visited[i][j] == 0 && arr[i][j] == 1) {

					bfs(i, j);
					cnt++;
				}
			}
		}
		printf("%d\n", cnt);
	}
	


	
}
profile
Server Network Engineer

0개의 댓글