๋ฐ์ํ
๋ฌธ์
์ง๋๊ฐ ์ฃผ์ด์ง๋ฉด ๋ชจ๋ ์ง์ ์ ๋ํด์ ๋ชฉํ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ์ฌ๋ผ.
๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ค์ง ๊ฐ๋ก์ ์ธ๋ก๋ก๋ง ์์ง์ผ ์ ์๋ค๊ณ ํ์.
์ ๋ ฅ
์ง๋์ ํฌ๊ธฐ n๊ณผ m์ด ์ฃผ์ด์ง๋ค. n์ ์ธ๋ก์ ํฌ๊ธฐ, m์ ๊ฐ๋ก์ ํฌ๊ธฐ๋ค.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000)
๋ค์ n๊ฐ์ ์ค์ m๊ฐ์ ์ซ์๊ฐ ์ฃผ์ด์ง๋ค. 0์ ๊ฐ ์ ์๋ ๋
์ด๊ณ 1์ ๊ฐ ์ ์๋ ๋
, 2๋ ๋ชฉํ์ง์ ์ด๋ค. ์
๋ ฅ์์ 2๋ ๋จ ํ๊ฐ์ด๋ค.
์ถ๋ ฅ
๊ฐ ์ง์ ์์ ๋ชฉํ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค. ์๋ ๊ฐ ์ ์๋ ๋ ์ธ ์์น๋ 0์ ์ถ๋ ฅํ๊ณ , ์๋ ๊ฐ ์ ์๋ ๋ ์ธ ๋ถ๋ถ ์ค์์ ๋๋ฌํ ์ ์๋ ์์น๋ -1์ ์ถ๋ ฅํ๋ค.
ํ์ด
// ํ์ด : https://whkakrkr.tistory.com
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef pair<int, int> ci;
int dx[] = {1,-1,0,0};
int dy[] = {0,0,1,-1};
int main() {
// input
int n,m;
cin >> n >> m;
vector<vector<int>>board(n, vector<int>(m));
int start_x, start_y;
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cin >> board[i][j];
if(board[i][j]==2) {
start_x = i;
start_y = j;
}
}
}
// solution : bfs
vector<vector<int>>dist(n, vector<int>(m, -1));
queue<ci>q;
dist[start_x][start_y] = 0;
q.push({start_x, start_y});
while(!q.empty()) {
ci cur = q.front();
q.pop();
int d = dist[cur.first][cur.second];
for(int dir=0; dir<4; dir++) {
int x = cur.first + dx[dir];
int y = cur.second + dy[dir];
if(x<0 || x>=n || y<0 || y>=m) {
// out of boundary
continue;
}
if(dist[x][y]!=-1 || board[x][y]==0) {
// already visit or can't visit
continue;
}
dist[x][y] = d+1;
q.push({x,y});
}
}
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(board[i][j]==0) {
dist[i][j] = 0;
}
}
}
// output
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
cout << dist[i][j] << " ";
}
cout << "\n";
}
return 0;
}
๋ฐ์ํ
'๐ Cpp > [Solved.ac] Class2~4' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 21736๋ฒ: ํ๋ด๊ธฐ๋ ์น๊ตฌ๊ฐ ํ์ํด (Silver II) (0) | 2024.11.12 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 18110๋ฒ: solved.ac (Silver IV) (0) | 2024.11.08 |
[BOJ][C++] ๋ฐฑ์ค 1676๋ฒ: ํฉํ ๋ฆฌ์ผ 0์ ๊ฐ์ (0) | 2023.04.19 |
[BOJ][C++] ๋ฐฑ์ค 9465๋ฒ: ์คํฐ์ปค (1) | 2023.04.18 |
[BOJ][C++] ๋ฐฑ์ค 1927๋ฒ: ์ต์ ํ (0) | 2023.04.11 |