https://www.acmicpc.net/problem/4963
λ¬Έμ
μ μ¬κ°νμΌλ‘ μ΄λ£¨μ΄μ Έ μλ μ¬κ³Ό λ°λ€ μ§λκ° μ£Όμ΄μ§λ€. μ¬μ κ°μλ₯Ό μΈλ νλ‘κ·Έλ¨μ μμ±νμμ€.
ν μ μ¬κ°νκ³Ό κ°λ‘, μΈλ‘ λλ λκ°μ μΌλ‘ μ°κ²°λμ΄ μλ μ¬κ°νμ κ±Έμ΄κ° μ μλ μ¬κ°νμ΄λ€.
λ μ μ¬κ°νμ΄ κ°μ μ¬μ μμΌλ €λ©΄, ν μ μ¬κ°νμμ λ€λ₯Έ μ μ¬κ°νμΌλ‘ κ±Έμ΄μ κ° μ μλ κ²½λ‘κ° μμ΄μΌ νλ€. μ§λλ λ°λ€λ‘ λλ¬μΈμ¬ μμΌλ©°, μ§λ λ°μΌλ‘ λκ° μ μλ€.
μ λ ₯
μ λ ₯μ μ¬λ¬ κ°μ ν μ€νΈ μΌμ΄μ€λ‘ μ΄λ£¨μ΄μ Έ μλ€. κ° ν μ€νΈ μΌμ΄μ€μ 첫째 μ€μλ μ§λμ λλΉ wμ λμ΄ hκ° μ£Όμ΄μ§λ€. wμ hλ 50λ³΄λ€ μκ±°λ κ°μ μμ μ μμ΄λ€.
λμ§Έ μ€λΆν° hκ° μ€μλ μ§λκ° μ£Όμ΄μ§λ€. 1μ λ , 0μ λ°λ€μ΄λ€.
μ λ ₯μ λ§μ§λ§ μ€μλ 0μ΄ λ κ° μ£Όμ΄μ§λ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€μ λν΄μ, μ¬μ κ°μλ₯Ό μΆλ ₯νλ€.
νμ΄
dfs λ¬Έμ λΌμ νμ΄λ²λ§ μλ©΄ κΈλ°© ν μ μλ€
νμλ 벑ν°λ₯Ό νλλ§ μ¬μ©νκ³ μΆμ΄μ μ λ ₯λ°μ μ§λ 벑ν°μ λ°λ‘ μ¬μ νμνλ€.
λ μ΄ 1λ‘ λμ΄μμΌλ―λ‘ 2λΆν° μΉ΄μ΄ν νκ³ λ¦¬ν΄ν λ 1μ λΉΌμ£Όμλ€
// νμ΄ : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int,int> ci;
int dx[8] = {0,0,-1,1,1,-1,1,-1};
int dy[8] = {1,-1,0,0,-1,1,1,-1};
int w,h;
int solution(vector<vector<int>>&v) {
int cnt = 1;
for(int i=0; i<h; i++) {
for(int j=0; j<w; j++) {
if(v[i][j]!=1) continue;
cnt++;
queue<ci> q;
q.push({i,j});
while(!q.empty()) {
ci cur = q.front();
q.pop();
for(int dir=0; dir<8; dir++) {
int x = cur.first + dir[dx];
int y = cur.second + dir[dy];
if(x<0 || x>=h || y<0 || y>=w) continue;
if(v[x][y]!=1) continue;
v[x][y] = cnt;
q.push({x,y});
}
}
}
}
return cnt-1;
}
int main() {
cin >> w >> h;
while(!(w==0 && h==0)) {
vector<vector<int>> v(h, vector<int>(w));
for(int i=0; i<h; i++) {
for(int j=0; j<w; j++) {
cin >> v[i][j];
}
}
cout << solution(v) << "\n";
cin >> w >> h;
}
}