아직 좌우앞뒤위아래 매커니즘이 뇌에 안박혀있어서 굉장히 원시적입니다.
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 | #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <queue> using namespace std; int box[104][104][104] = { 0, }; int x, y, z; queue<pair<pair<int, int>, int>> myq; bool isin(int a, int b, int c) { if (a >= 0 && b >= 0 && c >= 0 && a < x&&b < y&&c < z&&box[a][b][c] == 0)return true; else return false; } void bfs(int a, int b, int c) { if (isin(a - 1, b, c)) { box[a - 1][b][c] = 1; myq.push(make_pair(make_pair(a - 1, b), c)); } if (isin(a + 1, b, c)) { box[a + 1][b][c] = 1; myq.push(make_pair(make_pair(a + 1, b), c)); } if (isin(a, b - 1, c)) { box[a][b - 1][c] = 1; myq.push(make_pair(make_pair(a, b - 1), c)); } if (isin(a, b + 1, c)) { box[a][b + 1][c] = 1; myq.push(make_pair(make_pair(a, b + 1), c)); } if (isin(a, b, c - 1)) { box[a][b][c - 1] = 1; myq.push(make_pair(make_pair(a, b), c - 1)); } if (isin(a, b, c + 1)) { box[a][b][c + 1] = 1; myq.push(make_pair(make_pair(a, b), c + 1)); } } int main() { //freopen("test.txt", "r", stdin); cin >> x >> y >> z; for (int i = 0; i < z; i++) { for (int j = 0; j < y; j++) { for (int k = 0; k < x; k++) { cin >> box[k][j][i]; if (box[k][j][i] == 1) { myq.push(make_pair(make_pair(k, j), i)); } } } } int qsize, cnt = 0; while (!myq.empty()) { qsize = myq.size(); for (int i = 0; i < qsize; i++) { bfs(myq.front().first.first, myq.front().first.second, myq.front().second); myq.pop(); } if (myq.size() > 0)cnt++; } for (int i = 0; i < z; i++) { for (int j = 0; j < y; j++) { for (int k = 0; k < x; k++) { if (box[k][j][i] == 0) { cout << "-1"; return 0; } } } } cout << cnt; } | cs |
'재미있는공부이야기 > 알고리듬' 카테고리의 다른 글
백준 9019번 DSLR (0) | 2019.02.28 |
---|---|
백준 14499번 주사위굴리기 (0) | 2019.02.28 |
백준 2178번 미로찾기 (0) | 2019.02.20 |
KMP 알고리즘 (0) | 2019.02.15 |
3장. 문자열 (0) | 2019.02.13 |