1. count_mine 함수를 만들어서 (r,c)에 따른 지뢰 개수 호출
2. BFS호출 때마다 ans++가 되는데, count_mine == 0 이면 큐에 넣어서 한번에 펼쳐지는 곳을 찾는다.
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 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #if 01 #pragma warning (disable : 4996) #include <stdio.h> typedef struct _st { int r; int c; }ST; #define MAX (300+10) int T, tc; int N; char a[MAX][MAX]; ST Queue[MAX*MAX]; int WP, RP; int dr[] = {-1, 1, 0, 0, -1, 1, -1, 1 }; int dc[] = {0, 0, -1, 1, -1, -1, 1, 1 }; void InQueue(int a, int b) { Queue[WP].r = a; Queue[WP++].c = b; } ST DeQueue(void) { return Queue[RP++]; } int ans; void init(void) { ans = 0; } void input(void) { int i; scanf("%d", &N); for (i = 0; i < N; i++) { scanf("%s", &a[i][0]); } } int count_mine(int r, int c) { int i, nr, nc; int mine; mine = 0; for (i = 0; i < 8; i++) { nr = r + dr[i]; nc = c + dc[i]; if (nr<0 || nc<0 || nr>N - 1 || nc>N - 1) continue; if (a[nr][nc] == '*') mine++; } return mine; } void BFS(int sr, int sc) { int i, nr, nc; ST out; int mine; WP = 0; RP = 0; InQueue(sr, sc); a[sr][sc] = '0'; while (RP<WP) { out = DeQueue(); for (i = 0; i < 8; i++) { nr = out.r + dr[i]; nc = out.c + dc[i]; if (nr<0 || nc<0 || nr>N - 1 || nc>N - 1) continue; if (a[nr][nc] == '.') { mine = count_mine(nr, nc); if (mine == 0) InQueue(nr, nc); a[nr][nc] = mine + '0'; } } } } void output(void) { printf("#%d %d\n", tc, ans); } int main(void) { int i, j; scanf("%d", &T); for (tc = 1; tc <= T; tc++) { init(); input(); //process1 - BFS for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (a[i][j] == '.' && count_mine(i, j) == 0) { BFS(i, j); ans++; } } } //process2 - count for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (a[i][j] == '.') ans++; } } output(); } return 0; } #endif | cs |
'알고리즘 > SW Expert Academy' 카테고리의 다른 글
1210 Ladder1 (0) | 2018.09.20 |
---|---|
1204 최빈수 구하기 (0) | 2018.09.20 |
1206 View (0) | 2018.09.18 |
1251 하나로 (0) | 2018.09.18 |
1767 프로세서 연결하기 (0) | 2018.09.17 |