νμμ²λ¦¬λ?
νμμ²λ¦¬λ μ λ ₯ μμμ νμκ°μ΄ μνμ μΈ ν¨μλ₯Ό κ±°μ³μ μλ‘μ΄ κ°μΌλ‘ λ³κ²½λ νμ μΆλ ₯ μμμ λμΌν μμΉμ μ μ₯νλ κ²μ λ§νλ€.
νμμ λͺ¨μκ³Ό μ°κ²°μ±
νμμ λͺ¨μ
νμμ μ°κ²°
4-μ°κ²°μ±κ³Ό 8-μ°κ²°μ±
λ©λͺ¨λ¦¬λ₯Ό μ κ² μ¬μ©νλ λ²λ μ±μ μ½λ
bλ₯Ό lλ‘ λ³΅μ¬νλ€. μ΄λ 0μ 0, 1μ -1λ‘ λ³΅μ¬ //-1μ μμ§ λ²νΈλ₯Ό μ λΆμμμ νμν¨
lμ κ²½κ³. μ¦ j = 0, j = M-1, i = 0, i = N-1μΈ νμλ₯Ό 0μΌλ‘ μ€μ //μμ λ°κΉ₯μΌλ‘ λκ°λ κ±Έ λ°©μ§νκΈ° μν¨
label = 1;
for(j = 1 to M-2)
for(i = 1 to N-2) {
if(l(j, i) = -1) {
efficient_floodfill4(l, j, i, label);
label++;
}
}
//λ©λͺ¨λ¦¬λ₯Ό μ κ² μ¬μ©νλ ν¨μ¨μ μΈ 4-μ°κ²°μ± λ²λ μ±μ ν¨μ
function efficient_floodfill4(l, j, i, label) {
Q = NULL; //λΉ ν μμ±
push(Q(j, i));
while(Q != NULL) {
(y, x) = pop(Q); //Qμμ μμ νλ κΊΌλ΄κΈ°
if(l(y, x) = -1) {
left = right = x;
while(l(y, left-1) = -1) //μμ§ λ―Έμ²λ¦¬ μνμΈ μ΄μ μ°Ύλλ€. μΈμ μΌμͺ½ μ€ labelingμ΄ λμ§ μμ κ²½μ°
left--;
while(l(y, right+1) = -1) //μΈμ μ€λ₯Έμͺ½ μ€ labelingμ΄ λμ§ μμ κ²½μ°
right++;
for(c = left to right) {
l(y, c) = label;
//μΈμ μμͺ½ μ€ labelingμ΄ λμ§ μμ κ²½μ°
if(l(y-1, c) = -1 and (c = left or l(y-1, c-1) != -1))
push(Q, (y-1, c));
//μΈμ μλμͺ½ μ€ labelingμ΄ λμ§ μμ κ²½μ°
if(l(y+1, c) = -1 and (c = left or l(y+1, c-1) != -1))
push(Q, (y+1, c));
}
}
}
}
728x90