4963λ²: μ¬μ κ°μ
μ λ ₯μ μ¬λ¬ κ°μ ν μ€νΈ μΌμ΄μ€λ‘ μ΄λ£¨μ΄μ Έ μλ€. κ° ν μ€νΈ μΌμ΄μ€μ 첫째 μ€μλ μ§λμ λλΉ wμ λμ΄ hκ° μ£Όμ΄μ§λ€. wμ hλ 50λ³΄λ€ μκ±°λ κ°μ μμ μ μμ΄λ€. λμ§Έ μ€λΆν° hκ° μ€μλ μ§λ
www.acmicpc.net
λ¬Έμ
μ μ¬κ°νμΌλ‘ μ΄λ£¨μ΄μ Έ μλ μ¬κ³Ό λ°λ€ μ§λκ° μ£Όμ΄μ§λ€. μ¬μ κ°μλ₯Ό μΈλ νλ‘κ·Έλ¨μ μμ±νμμ€.

ν μ μ¬κ°νκ³Ό κ°λ‘, μΈλ‘ λλ λκ°μ μΌλ‘ μ°κ²°λμ΄ μλ μ¬κ°νμ κ±Έμ΄κ° μ μλ μ¬κ°νμ΄λ€.
λ μ μ¬κ°νμ΄ κ°μ μ¬μ μμΌλ €λ©΄, ν μ μ¬κ°νμμ λ€λ₯Έ μ μ¬κ°νμΌλ‘ κ±Έμ΄μ κ° μ μλ κ²½λ‘κ° μμ΄μΌ νλ€. μ§λλ λ°λ€λ‘ λλ¬μΈμ¬ μμΌλ©°, μ§λ λ°μΌλ‘ λκ° μ μλ€.
μ
λ ₯
μ λ ₯μ μ¬λ¬ κ°μ ν μ€νΈ μΌμ΄μ€λ‘ μ΄λ£¨μ΄μ Έ μλ€. κ° ν μ€νΈ μΌμ΄μ€μ 첫째 μ€μλ μ§λμ λλΉ wμ λμ΄ hκ° μ£Όμ΄μ§λ€. wμ hλ 50λ³΄λ€ μκ±°λ κ°μ μμ μ μμ΄λ€. λμ§Έ μ€λΆν° hκ° μ€μλ μ§λκ° μ£Όμ΄μ§λ€. 1μ λ , 0μ λ°λ€μ΄λ€. μ λ ₯μ λ§μ§λ§ μ€μλ 0μ΄ λ κ° μ£Όμ΄μ§λ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€μ λν΄μ, μ¬μ κ°μλ₯Ό μΆλ ₯νλ€.
μμ μ λ ₯
5 4
1 0 1 0 0
1 0 0 0 0
1 0 1 0 1
1 0 0 1 0
5 4
1 1 1 0 1
1 0 1 0 1
1 0 1 0 1
1 0 1 1 1
5 5
1 0 1 0 1
0 0 0 0 0
1 0 1 0 1
0 0 0 0 0
1 0 1 0 1
0 0
μμ μΆλ ₯
3
1
9
μ€λͺ
1μ΄λ©΄ μ¬, 0μ λ°λ€λ€. μ¬μ΄ λκ°μ μλλ©΄ μνμ’μ°λ‘ μ΄μ΄μ ΈμμΌλ©΄ κ·Έκ² νλμ μ¬μ΄λ€. κ·Έ μ¬μ κ°μλ₯Ό λ°ννλ©΄ λλ€.
νμ΄

Solution
#include <iostream>
using namespace std;
#define MAX 50
int w, h, island[MAX][MAX], result;
int dx[8] = { 1, 1, 0, -1, -1, -1, 0, 1 }; //μ’ν (0,0)μμ μκ³λ°©ν₯μΌλ‘ μ°¨λ‘λ‘ μ μ κ²
int dy[8] = { 0, -1, -1, -1, 0, 1, 1, 1 };
bool visited[MAX][MAX];
void DFS(int y, int x) {
visited[y][x] = true; //λ°©λ¬Έ νμ
for (int i = 0; i < 8; i++) {
//μ£Όμ μ’ν νμ
int nx = dx[i] + x;
int ny = dy[i] + y;
//μ μ¬κ°ν λ²μλ₯Ό λ²μ΄λλ©΄ 무μ
if (nx < 0 || nx >= w || ny < 0 || ny >= h)
continue;
//μ¬μΈλ° λ°©λ¬Έ μ νμΌλ©΄ DFS νμ (island[y][x]λ μ’νκ° μλλΌ νλ ¬μ)
if (island[ny][nx] == 1 && visited[ny][nx] == 0) {
DFS(ny, nx);
}
}
}
void reset() { //μ΄κΈ°ν
for (int j = 0; j < h; j++) {
for (int i = 0; i < w; i++) {
visited[j][i] = 0;
island[j][i] = 0;
}
}
}
int main() {
while (true) {
cin >> w >> h;
if (w == 0 && h == 0) //0 0μ΄ μ
λ ₯λλ©΄ μ’
λ£
return 0;
for (int j = 0; j < h; j++) {
for (int i = 0; i < w; i++)
cin >> island[j][i];
}
for (int y = 0; y < h; y++) {
for (int x = 0; x < w; x++) {
//μ¬μΈλ° λ°©λ¬Έ μ νμΌλ©΄ DFS νμ ν μ¬ κ°μ μΉ΄μ΄νΈ
if (island[y][x] == 1 && visited[y][x] == 0) {
DFS(y, x);
result++;
}
}
}
cout << result << '\n';
//μλ‘ μ
λ ₯λκΈ° λλ¬Έμ μ¬ κ°μμ λ°©λ¬Ένμ μ΄κΈ°ν μμΌμΌ ν¨
result = 0;
reset();
}
}'π§© Algorithm > [BOJ] Silver' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| BOJ 10828λ² : μ€ν (C++/Silver 4) (0) | 2022.10.05 |
|---|---|
| BOJ 10845λ² : ν (C++/Silver 4) (0) | 2022.10.04 |
| BOJ 11724λ² : μ°κ²° μμμ κ°μ (C++/Silver 2) (0) | 2022.09.29 |
| BOJ 11726λ² : 2Γn νμΌλ§ (C++/Silver 3) (0) | 2022.09.26 |
| BOJ 9095λ² : 1, 2, 3 λνκΈ° (C++/Silver 3) (0) | 2022.09.23 |