[λ°±μ€] 4963λ² - μ¬μ κ°μ (C++)
4963λ²: μ¬μ κ°μ
μ λ ₯μ μ¬λ¬ κ°μ ν μ€νΈ μΌμ΄μ€λ‘ μ΄λ£¨μ΄μ Έ μλ€. κ° ν μ€νΈ μΌμ΄μ€μ 첫째 μ€μλ μ§λμ λλΉ wμ λμ΄ hκ° μ£Όμ΄μ§λ€. wμ hλ 50λ³΄λ€ μκ±°λ κ°μ μμ μ μμ΄λ€. λμ§Έ μ€λΆν° hκ° μ€μλ μ§λ
www.acmicpc.net
λ¬Έμ
μ μ¬κ°νμΌλ‘ μ΄λ£¨μ΄μ Έ μλ μ¬κ³Ό λ°λ€ μ§λκ° μ£Όμ΄μ§λ€. μ¬μ κ°μλ₯Ό μΈλ νλ‘κ·Έλ¨μ μμ±νμμ€.
ν μ μ¬κ°νκ³Ό κ°λ‘, μΈλ‘ λλ λκ°μ μΌλ‘ μ°κ²°λμ΄ μλ μ¬κ°νμ κ±Έμ΄κ° μ μλ μ¬κ°νμ΄λ€.
λ μ μ¬κ°νμ΄ κ°μ μ¬μ μμΌλ €λ©΄, ν μ μ¬κ°νμμ λ€λ₯Έ μ μ¬κ°νμΌλ‘ κ±Έμ΄μ κ° μ μλ κ²½λ‘κ° μμ΄μΌ νλ€. μ§λλ λ°λ€λ‘ λλ¬μΈμ¬ μμΌλ©°, μ§λ λ°μΌλ‘ λκ° μ μλ€.
μ λ ₯
μ λ ₯μ μ¬λ¬ κ°μ ν μ€νΈ μΌμ΄μ€λ‘ μ΄λ£¨μ΄μ Έ μλ€. κ° ν μ€νΈ μΌμ΄μ€μ 첫째 μ€μλ μ§λμ λλΉ wμ λμ΄ hκ° μ£Όμ΄μ§λ€. wμ hλ 50λ³΄λ€ μκ±°λ κ°μ μμ μ μμ΄λ€.
λμ§Έ μ€λΆν° hκ° μ€μλ μ§λκ° μ£Όμ΄μ§λ€. 1μ λ , 0μ λ°λ€μ΄λ€.
μ λ ₯μ λ§μ§λ§ μ€μλ 0μ΄ λ κ° μ£Όμ΄μ§λ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€μ λν΄μ, μ¬μ κ°μλ₯Ό μΆλ ₯νλ€.
νμ΄κ³Όμ
λ¬Έμ μμ μꡬνλ μ¬νμ΄ μ°μ λμ§μμ μ¬μ κ°μλ₯Ό ꡬνλ λ¬Έμ λ‘ bfsλ₯Ό ν΅ν΄ μ λΆ νμμ νλ©΄ λλ λ¬Έμ μμλ€.
* * *
* 1 *
* * *
1μ κΈ°μ€μΌλ‘ λͺ¨λ λ²μλ₯Ό λ€ κ²μ¬ν΄μΌν΄μ dirμ΄λΌλ λ³μλ₯Ό λ§λ€μ΄μ 체ν¬ν΄μ£Όλ μν μ ν΄μ£Όμλ€.
code
#include <iostream>
#include <cstring>
#include <queue>
int dir[2][8] = {{-1, -1, -1, 0, 0, 1, 1, 1}, {-1, 0, 1, -1, 1, -1, 0, 1}};
int island[51][51];
void bfs(int h, int w, int y, int x)
{
int tempY, tempX;
std::queue <std::pair<int, int> > que;
std::pair <int, int> temp;
que.push(std::make_pair(y, x));
island[y][x] = -1;
while (!que.empty())
{
temp = que.front();
que.pop();
for (int j = 0; j < 8; j++) {
tempY = temp.first + dir[0][j];
tempX = temp.second + dir[1][j];
if (h <= tempY || w <= tempX || tempY < 0 || tempX < 0) continue;
if (island[tempY][tempX] == 1) {
island[tempY][tempX] = -1;
que.push(std::make_pair(tempY, tempX));
}
}
}
}
int main(void)
{
int w, h, count;
while (true)
{
std::cin >> w >> h;
if (w == 0 && h == 0) break;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
std::cin >> island[i][j];
}
}
count = 0;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (island[i][j] == 1) {
bfs(h, w, i, j);
count++;
}
}
}
std::memset(island, -1, sizeof(island));
std::cout << count << "\n";
}
return (0);
}
νκΈ°
λ¬Έμ μμ²΄κ° μ΅μνλ λ¬Έμ λΌ ν¬κ² μ΄λ ΅μ§μκ² μ κ·Όν μ μμλ€.