티스토리 뷰
백준 :: BOJ :: 16236 :: 아기 상어
출처 : https://www.acmicpc.net/problem/16236
#include <bits/stdc++.h>
using namespace std;
int N, t, tt, fs, ss, si, sj, ni, nj,
arr[21][21], v[21][21], di[] = {-1,0,0,1}, dj[] = {0,-1,1,0};
queue<pair<int, int>> q; priority_queue<int,vector<int>,greater<int>> pq;
void clear() {
queue<pair<int, int>> e; priority_queue<int, vector<int>, greater<int>>ee; swap(pq, ee); swap(q, e);
memset(v, 0, sizeof(v)); q.push(make_pair(ni, nj));
}
void bfs() {
while (!q.empty()) {
int s = q.size(); tt++;
while (s--) {
auto tmp = q.front(); q.pop();
for (int d = 0; d < 4; d++) {
ni = tmp.first + di[d]; nj = tmp.second + dj[d];
if (ni > 0 && ni <= N && nj > 0 && nj <= N && arr[ni][nj] <= ss &&!v[ni][nj]) {
if (arr[ni][nj] < ss && arr[ni][nj] >0) pq.push(ni*100+nj);
else v[ni][nj] = 1, q.push(make_pair(ni, nj));
}
}
}
if (!pq.empty()) {
ni = pq.top() / 100; nj = pq.top() % 100;
fs++; arr[ni][nj] = 0; clear(); t += tt; tt = 0;
if (ss == fs) ss++, fs = 0;
}
}
}
int main() {
std::ios::sync_with_stdio(false); cin.tie(0);
cin >> N; t = 0; ss = 2; fs = 0;
for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) {
cin >> arr[i][j]; if (arr[i][j] == 9) arr[i][j]=0, si = i, sj = j, q.push(make_pair(i,j));
}
bfs();
cout << t;
return 0;
}
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ 16235] 나무 재테크 (0) | 2019.01.10 |
---|---|
[BOJ 16234] 인구 이동 (0) | 2019.01.09 |
[BOJ 5373] 큐빙 (2) | 2018.10.25 |
[BOJ 15686] 치킨 배달 (0) | 2018.10.08 |
[BOJ 15685] 드래곤 커브 (0) | 2018.10.07 |
- Total
- Today
- Yesterday
- 트렌드
- SW Expert Academy
- 17142
- 입출력
- 17143
- 2018 카카오 블라인드 채용
- DP
- 17140
- SWEA
- 2018 KAKAO BLIND RECRUITMENT
- string
- 시간 복잡도
- 팁
- boj
- STL
- hackerrank
- 백준
- 연구소 3
- 역량 테스트
- 이차원 배열과 연산
- 삼성
- scanf
- 새로운 게임 2
- 미세먼지 안녕!
- 17779
- 알고리즘
- 17837
- 게리맨더링 2
- 17144
- DFS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |