#include <iostream> using namespace std; | |
| int M, N, K; | |
| bool map[51][51]; | |
| int visit[51][51]; | |
| int dx[4]={1, -1, 0, 0}; | |
| int dy[4]={0, 0, 1, -1}; | |
| int cnt; | |
| void dfs(int x, int y) | |
| { | |
| for(int i=0; i<4; i++) | |
| { | |
| int nx=x+dx[i]; | |
| int ny=y+dy[i]; | |
| if(nx>=0 && nx<N && ny>=0 && ny<M ) | |
| { | |
| if(map[nx][ny] && visit[nx][ny]==0) | |
| { | |
| visit[nx][ny]=cnt; | |
| dfs(nx,ny); | |
| } | |
| } | |
| } | |
| } | |
| int main() | |
| { | |
| int T; | |
| cin >> T; | |
| for(int tc=0; tc<T; tc++) | |
| { | |
| cin >> M >> N >> K; | |
| //initialize | |
| for(int i=0; i<51; i++) for(int j=0; j<51; j++) { map[i][j]=0; visit[i][j]=0; } | |
| cnt = 1; | |
| //input, map | |
| for(int i=0; i<K; i++) { int x,y; cin >> x >> y; map[y][x]=1;} | |
| for(int i=0; i<N; i++) for(int j=0; j<M; j++) if(!visit[i][j]&& map[i][j]) { dfs(i,j); cnt++; } | |
| cout << cnt -1 << endl; | |
| } | |
| } |
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
| 171116_1987_알파벳 (0) | 2017.11.16 |
|---|---|
| 171115_2667_단지번호붙이기 (0) | 2017.11.15 |
| 171114_1697_숨바꼭질 (0) | 2017.11.14 |
| 171113_1260_dfs와 bfs (0) | 2017.11.13 |
| 171112_2814_최장경로 (0) | 2017.11.12 |