몽셀통통의 블로그
[BaekJoon] 3055 탈출 :: monton 본문
문제
https://www.acmicpc.net/problem/3055
풀이
가중치가 없고 최단 거리를 구하는 문제이므로 bfs 사용
일단 물이 들어가는 큐와 고슴도치의 위치를 담는 큐 이렇게 2개를 구성한 다음
큐에 물을 일단 담고 고슴도치 위치를 넣는다
코드
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 | #include <iostream> #include <queue> using namespace std; int R, C,ans,flag; char arr[51][51]; int smap[51][51]; int wmap[51][51]; int dir[4][2] = { {-1,0},{0,1},{1,0},{0,-1} }; int main() { cin >> R >> C; queue <int> sx, sy, wx, wy; for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { cin >> arr[i][j]; if (arr[i][j] == 'S') sx.push(i), sy.push(j), smap[i][j] = 1; if (arr[i][j] == '*') wx.push(i), wy.push(j), wmap[i][j] = 1; } } while (!sx.empty()) { int wcnt = wx.size(); while (wcnt--) { int x = wx.front(); int y = wy.front(); wx.pop(), wy.pop(); for (int i = 0; i < 4; i++) { int nx = x + dir[i][0]; int ny = y + dir[i][1]; if (nx < 0 || nx >= R || ny < 0 || ny >= C) continue; if (wmap[nx][ny]||arr[nx][ny]=='*'|| arr[nx][ny] == 'D' || arr[nx][ny] == 'X') continue; wx.push(nx), wy.push(ny); wmap[nx][ny] = 1; } } int scnt = sx.size(); while (scnt--) { int x = sx.front(); int y = sy.front(); sx.pop(), sy.pop(); if (arr[x][y] == 'D') { flag = 1; break; } for (int i = 0; i < 4; i++) { int nx = x + dir[i][0]; int ny = y + dir[i][1]; if (nx < 0 || nx >= R || ny < 0 || ny >= C) continue; if (smap[nx][ny] || wmap[nx][ny]||arr[nx][ny] == '*' || arr[nx][ny] == 'X') continue; sx.push(nx), sy.push(ny); smap[nx][ny] = 1; } } if (flag) break; ans++; } if (flag) cout << ans; else cout << "KAKTUS"; } | cs |
유사 문제
[BaekJoon] 5427 불 https://www.acmicpc.net/problem/5427
'프로그래밍 > 백준 문제 풀기' 카테고리의 다른 글
[BaekJoon] 10026 적록색약 :: monton (0) | 2018.05.31 |
---|---|
[BaekJoon] 2066 미로만들기 :: monton (0) | 2018.05.31 |
[BaekJoon] 1194 달이 차오른다, 가자 :: monton (0) | 2018.05.30 |
[BaekJoon] 5427 불 :: monton (0) | 2018.05.29 |
[BaekJoon] 2667 단지번호붙이기 :: monton (0) | 2018.05.27 |