[백준 4963번] 섬의 개수

2017. 8. 27. 17:14알고리즘/백준

반응형




소스코드


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
#include <iostream>
using namespace std;
 
typedef struct{
    int x, y;
}QUE;
int xpos[8= { -1-1-100111 };
int ypos[8= { -101-11-101 };
 
int main() {
    while (1) {
        int w, h, map[51][51], visit[51][51],cnt=3;
        cin >> w >> h;
        if (!w&&!h)
            return 0;
        for (int i = 0; i < h; i++)
            for (int j = 0; j < w; j++) {
                cin >> map[i][j];
                visit[i][j] = 0;
            }
        QUE q[10001];
        for (int i = 0; i < h; i++)
            for (int j = 0; j < w; j++) {
                int hh = 0, tt = 0;
                if (map[i][j]==1) {
                    q[tt].x = i, q[tt++].y = j;
                    while (hh != tt){
                        int curx = q[hh].x;
                        int cury = q[hh++].y;
                        for (int a = 0; a < 8; a++) {
                            if (curx + xpos[a] < 0 || curx + xpos[a] >= h || cury + ypos[a] < 0 || cury + ypos[a] >= w)
                                continue;
                            if (map[curx + xpos[a]][cury + ypos[a]] && !visit[curx + xpos[a]][cury + ypos[a]]) {
                                visit[curx + xpos[a]][cury + ypos[a]] = 1;
                                map[curx + xpos[a]][cury + ypos[a]] = cnt;
                                q[tt].x = curx + xpos[a];
                                q[tt++].y = cury + ypos[a];
                            }
                        }
                    }
                    cnt++;
                }
            }
        cout << cnt-3 << '\n';
    }
    return 0;
}
cs


반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 1063번] 킹  (0) 2017.09.03
[백준 9440번] 숫자 더하기  (0) 2017.08.30
[백준 1269번] 대칭 차집합  (0) 2017.08.23
[백준 1068번] 트리  (1) 2017.08.21
[백준 2688번] 줄어들지 않아  (0) 2017.08.21