낭만 IT

반응형

알고리즘

Flood Fill

풀이

주어지는 X, Y 좌표가 Zero base이기 때문에 Zero base로 짜는 것이 편하다.

'_' (빈칸) 과 '*'(채워진 칸)을 0, 1으로 대응시키면 조건 처리를 할 때 더욱 편리하게 할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include<iostream>
using namespace std;
 
int in[10][10];
int dir[4][2]={{1,0}, {0,1}, {-1,0}, {0,-1}};
 
void print(){
        for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            if(in[i][j])
                cout<<'*';
            else
                cout<<'_';
        }
        cout<<"\n";
    }
}
 
//flood fill 재귀 구현 
void fill(int a,int b){ 
 
    if(in[a][b])
        return;
    in[a][b]=1;
    
    for(int i=0;i<4;i++){
        int na=a+dir[i][0], nb=b+dir[i][1];
 
        //이미 방문 했던 곳이거나 배열의 범위를 벗어난다면 
        if( in[na][nb] || na>=10 || nb>=10 || na<0 || nb<0
            continue;
        
        fill(na,nb);
    }
    
}
 
int main(){
    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
            char tmp;
            cin>>tmp;
            if(tmp=='*')
                in[i][j]=1;
        }
    }
    
    int a,b;
    cin>>a>>b;
    fill(b,a);        
    print();
    
    
}
반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band