오랜만에 백준!!!!
예전에 단지 번호 붙이기였나...그문제랑 비슷한듯.
Farm 배열에서 1인 부분에서 BFS 돌린 후, BFS 돌린 횟수를 출력하면 끝~
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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | #include <stdio.h> #include <string.h> int M, N, NUM, a, b, Res; int Farm[55][55] = {0,}; typedef struct { int x; int y; }Point; int BFS(int y, int x) { int dx[] = { 0,0,1,-1 }; int dy[] = { 1,-1,0,0 }; Point Q[50 * 50] = { 0, }; int Q_Front = -1, Q_Back = -1; Q[++Q_Back].y = y; Q[Q_Back].x = x; Farm[y][x] = 0; while (Q_Front != Q_Back) { int xx = Q[++Q_Front].x; int yy = Q[Q_Front].y; for (int i = 0; i < 4; i++) { int xxx = xx + dx[i]; int yyy = yy + dy[i]; if (xxx < 0 || yyy < 0 || xxx >= M || yyy >= N) continue; if (Farm[yyy][xxx] == 1) { Q[++Q_Back].x = xxx; Q[Q_Back].y = yyy; Farm[yyy][xxx] = 0; } } } return 1; } int main() { int Test; scanf("%d",&Test); for (int i = 0; i < Test; i++) { memset(Farm, 0, sizeof(Farm)); Res = 0; scanf("%d %d %d", &M, &N, &NUM);//가로, 세로 , 개수 for (int j = 0; j < NUM;j++) { scanf("%d %d", &a, &b); Farm[b][a] = 1; } for (a = 0; a < N; a++) { for (b = 0; b < M; b++) { if (Farm[a][b] == 1) { Res += BFS(a, b); } } } printf("%d\n",Res); } return 0; } | cs |
'SW 업무 관련 > 백준' 카테고리의 다른 글
[C언어] 2206. 벽 부수고 이동하기 (0) | 2018.08.12 |
---|---|
[C언어] 2667. 단지 번호붙이기 (0) | 2018.08.12 |
[BAEKJOON] 2606_바이러스 (0) | 2018.06.06 |
[BEAKJOON] 풀었던 문제들 복습 - 1편(1000번,1001번,1003번,1008번,1057번) (0) | 2017.09.17 |
[BEAKJOON] 2456_나는 학급회장이다_C언어 (0) | 2017.09.10 |