반응형
알고리즘
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(); } |
반응형
'Problem Solve > DFS & BFS' 카테고리의 다른 글
[코드업] 4039 : 놀이공원 (C) (0) | 2020.03.10 |
---|---|
[백준] 2667번 단지 번호 붙이기 (C) (0) | 2020.03.10 |
[백준] 2606번 바이러스 (C) (0) | 2020.03.10 |
[코드업] 3212 : 위상 정렬(topological sort) (C) (0) | 2020.03.09 |
[코드업] 2605 : 캔디팡 (C) (0) | 2020.03.09 |