본문 바로가기

알고리즘(C++)/백준 알고리즘

[백준] C++ 4936번 : 섬의 개수

풀이과정


 

 

코드


더보기
 #include <iostream>
using namespace std;

int iIsland[50][50] = { 0, };
int W = 0, H = 0;

void CheckIsland(int w, int h);
int main()
{


	cin >> W >> H;

	while (W != 0 && H != 0)
	{
		int iNumOfIsland = 0;

		for (int j = 0; j < H; ++j)
		{
			for (int i = 0; i < W; ++i)
			{
				cin >> iIsland[j][i];
			}
		}

		for (int j = 0; j < H; ++j)
		{
			for (int i = 0; i < W; ++i)
			{
				if (iIsland[j][i] == 1)
				{
					iNumOfIsland++;
					CheckIsland(i, j);
				}
			}
		}
		cout << iNumOfIsland << endl;
		cin >> W >> H;
	}
	
	return 0;
}

void CheckIsland(int w, int h)
{
	if (iIsland[h][w] == 1)
	{
		iIsland[h][w] = 0;
		if (w != 0)CheckIsland(w - 1, h);
		if (w != W - 1)CheckIsland(w + 1, h);
		if (h != 0)CheckIsland(w, h - 1);
		if (h != H - 1)CheckIsland(w, h + 1);

		if (w > 0 && h > 0)CheckIsland(w - 1, h - 1);
		if (w < W - 1 && h < H - 1)CheckIsland(w + 1, h + 1);
		if (w > 0 && h < H - 1)CheckIsland(w - 1, h + 1);
		if (w < W - 1 && h > 0)CheckIsland(w+1, h - 1);
	}
}