https://www.acmicpc.net/problem/5427
๋ฌธ์
์๊ทผ์ด๋ ๋น ๊ณต๊ฐ๊ณผ ๋ฒฝ์ผ๋ก ์ด๋ฃจ์ด์ง ๊ฑด๋ฌผ์ ๊ฐํ์๋ค. ๊ฑด๋ฌผ์ ์ผ๋ถ์๋ ๋ถ์ด ๋ฌ๊ณ , ์๊ทผ์ด๋ ์ถ๊ตฌ๋ฅผ ํฅํด ๋ฐ๊ณ ์๋ค.
๋งค ์ด๋ง๋ค, ๋ถ์ ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ์ธ์ ํ ๋น ๊ณต๊ฐ์ผ๋ก ํผ์ ธ๋๊ฐ๋ค. ๋ฒฝ์๋ ๋ถ์ด ๋ถ์ง ์๋๋ค. ์๊ทผ์ด๋ ๋์๋จ๋ถ ์ธ์ ํ ์นธ์ผ๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ, 1์ด๊ฐ ๊ฑธ๋ฆฐ๋ค. ์๊ทผ์ด๋ ๋ฒฝ์ ํต๊ณผํ ์ ์๊ณ , ๋ถ์ด ์ฎ๊ฒจ์ง ์นธ ๋๋ ์ด์ ๋ถ์ด ๋ถ์ผ๋ ค๋ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋ค. ์๊ทผ์ด๊ฐ ์๋ ์นธ์ ๋ถ์ด ์ฎ๊ฒจ์ด๊ณผ ๋์์ ๋ค๋ฅธ ์นธ์ผ๋ก ์ด๋ํ ์ ์๋ค.
๋น๋ฉ์ ์ง๋๊ฐ ์ฃผ์ด์ก์ ๋, ์ผ๋ง๋ ๋นจ๋ฆฌ ๋น๋ฉ์ ํ์ถํ ์ ์๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ํ ์คํธ ์ผ์ด์ค์ ๊ฐ์๊ฐ ์ฃผ์ด์ง๋ค. ํ ์คํธ ์ผ์ด์ค๋ ์ต๋ 100๊ฐ์ด๋ค.
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ์ฒซ์งธ ์ค์๋ ๋น๋ฉ ์ง๋์ ๋๋น์ ๋์ด w์ h๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ w,h ≤ 1000)
๋ค์ h๊ฐ ์ค์๋ w๊ฐ์ ๋ฌธ์, ๋น๋ฉ์ ์ง๋๊ฐ ์ฃผ์ด์ง๋ค.
- '.': ๋น ๊ณต๊ฐ
- '#': ๋ฒฝ
- '@': ์๊ทผ์ด์ ์์ ์์น
- '*': ๋ถ
๊ฐ ์ง๋์ @์ ๊ฐ์๋ ํ๋์ด๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค๋ง๋ค ๋น๋ฉ์ ํ์ถํ๋๋ฐ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค. ๋น๋ฉ์ ํ์ถํ ์ ์๋ ๊ฒฝ์ฐ์๋ "IMPOSSIBLE"์ ์ถ๋ ฅํ๋ค.
ํ์ด
[๐ Baaaaaarking/0x09๊ฐ - BFS] - [BOJ G4][C++] ๋ฐฑ์ค 4179๋ฒ: ๋ถ!
4179๋ฒ ์ ๋ค์ค์ผ์ด์ค ๋ฒ์ .. ์ผ๋ก ์ฝ๊ฒ ํ๋ฆด๊ฑฐ๋ผ ์๊ฐํ๋๋ฐ
์๋์๋คใ ใ
์ฐ์ ์ ๋ฐ๊ฟ์ฃผ๊ณ ์์ ๋ ๋ค ๋ง์๋๋ฐ
๋ฃ์๋ง์ 0%์์ ํ๋ ธ์ต๋๋ค
๊ฒ์ํ์ ์ฐพ์๋ณด๋.. ๋ฐฐ์ด ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ๊ฑฐ๋ผ ํ๋๋ผ..
๊ทธ๋์ ๋ฐฐ์ด ํฌ๊ธฐ ๋ฐ๊ฟ์คฌ๋๋
25%์์ ํ๋ ธ์ต๋๋ค..
์ฐพ์๋ณด๋ 25%์์ ํ๋ฆฌ๋ ์ฌ๋๋ค์ด ์๋นํ ๋ง์๋ค ใ ใ
๋คํํ ๊ฒ์ํ ์ ๋ ๋์ ํ ์คํธ์ผ์ด์ค๋ฅผ ๋๋๋ง๋ค ํ๋ฅผ ๋น์์ฃผ์ง ์์๊ธฐ ๋๋ฌธ์ ์๊ธด ์ผ์ด๋ผ๋๊ฑธ ์ ์ ์์๋ค!
https://www.acmicpc.net/board/view/71789
์งง์ง๋ง ๊ฐ์ฌํ ๊ฒ์ํ ๊ธ ํ๋..
์ข์์ ๊ฐ์ฌํ ๋๋ฅด๊ณ ํด๊ฒฐํ๋ค..
// Authored by : seondal
// ํ์ด : https://whkakrkr.tistory.com/
// Co-authored by : -
//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
using namespace std;
int dx[8] = {0,0,1,-1};
int dy[8] = {1,-1,0,0};
queue<pair<int, int>> q;
queue<pair<int, int>> s;
char board[1002][1002];
int fire[1002][1002];
int jihun[1002][1002];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int t;
cin >> t;
while (t--) {
// ์ด๊ธฐํ
bool success = false;
while(!q.empty()) q.pop();
while(!s.empty()) s.pop();
// ์
๋ ฅ ๋ฐ๊ธฐ
int r,c;
cin >> c >> r;
for(int i=0; i<r; i++){
for(int j=0; j<c; j++){
cin >> board[i][j];
fire[i][j] = -1;
jihun[i][j] = -1;
if(board[i][j] == '*'){
q.push({i,j});
fire[i][j] = 0;
}
if(board[i][j] == '@') {
s.push({i,j});
jihun[i][j] = 0;
}
}
}
// ์๊ฐ์ ๋ฐ๋ฅธ ๋ถ์ ์์น
while(!q.empty()){
pair<int, int> current = q.front();
q.pop();
for(int dir=0; dir<4; dir++){
int x = current.first + dx[dir];
int y = current.second + dy[dir];
if(x<0 || x>=r || y<0 || y>=c) continue;
if(fire[x][y] >= 0 || board[x][y] == '#') continue; // ์ด๋ฏธ ๋ถ์ด ์๊ฑฐ๋ ๋ฒฝ์ด๋ผ๋ฉด ํจ์ค
fire[x][y] = fire[current.first][current.second] + 1;
q.push({x,y});
}
}
// ์๊ฐ์ ๋ฐ๋ฅธ ์งํ์ด์ ์์น
while(!s.empty() && !success) {
pair<int, int> current = s.front();
s.pop();
for(int dir=0; dir<4; dir++){
int x = current.first + dx[dir];
int y = current.second + dy[dir];
// ๋ฏธ๋ก ํ์ถ์ ์ข
๋ฃ
if(x<0 || x>=r || y<0 || y>=c) {
cout << jihun[current.first][current.second] + 1 << "\n";
success = true;
break;
}
// ์ด๋ฏธ ๋ฐฉ๋ฌธํ๊ฑฐ๋ ๋ฒฝ์ด ์์ผ๋ฉด ํจ์ค
if(jihun[x][y] >= 0 || board[x][y] == '#') continue;
// ๊ฐ๋ ค๋ ๊ณณ์ ๋ถ์ด ์ด๋ฏธ ์๋ค๋ฉด ํจ์ค
if(fire[x][y] != -1 && jihun[current.first][current.second] + 1 >= fire[x][y]) continue;
jihun[x][y] = jihun[current.first][current.second] + 1;
s.push({x,y});
}
}
// ํ์ถ ์คํจ
if(!success)
cout << "IMPOSSIBLE\n";
}
return 0;
}
/*
*/
'๐ Baaaaaarking > 0x09๊ฐ - BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ S1][C++] ๋ฐฑ์ค 2667๋ฒ : ๋จ์ง๋ฒํธ ๋ถ์ด๊ธฐ (6%) (0) | 2022.03.24 |
---|---|
[BOJ S1][C++] ๋ฐฑ์ค 2583๋ฒ : ์์ญ ๊ตฌํ๊ธฐ (0) | 2022.03.21 |
[BOJ G4][C++] ๋ฐฑ์ค 4179๋ฒ: ๋ถ! (0) | 2022.03.16 |
[BOJ S2][C++] ๋ฐฑ์ค 7562๋ฒ: ๋์ดํธ์ ์ด๋ (0) | 2022.03.15 |
[BOJ G5][C++] ๋ฐฑ์ค 7569๋ฒ: ํ ๋งํ (0) | 2022.03.10 |