๋ฌธ์
์ง๋๊ฐ ์ฃผ์ด์ง๋ฉด ๋ชจ๋ ์ง์ ์ ๋ํด์ ๋ชฉํ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ์ฌ๋ผ.
๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ค์ง ๊ฐ๋ก์ ์ธ๋ก๋ก๋ง ์์ง์ผ ์ ์๋ค๊ณ ํ์.
์ ๋ ฅ
์ง๋์ ํฌ๊ธฐ n๊ณผ m์ด ์ฃผ์ด์ง๋ค. n์ ์ธ๋ก์ ํฌ๊ธฐ, m์ ๊ฐ๋ก์ ํฌ๊ธฐ๋ค.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000)
๋ค์ n๊ฐ์ ์ค์ m๊ฐ์ ์ซ์๊ฐ ์ฃผ์ด์ง๋ค. 0์ ๊ฐ ์ ์๋ ๋ ์ด๊ณ 1์ ๊ฐ ์ ์๋ ๋ , 2๋ ๋ชฉํ์ง์ ์ด๋ค. ์ ๋ ฅ์์ 2๋ ๋จ ํ๊ฐ์ด๋ค.
์ถ๋ ฅ
๊ฐ ์ง์ ์์ ๋ชฉํ์ง์ ๊น์ง์ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ค. ์๋ ๊ฐ ์ ์๋ ๋ ์ธ ์์น๋ 0์ ์ถ๋ ฅํ๊ณ , ์๋ ๊ฐ ์ ์๋ ๋ ์ธ ๋ถ๋ถ ์ค์์ ๋๋ฌํ ์ ์๋ ์์น๋ -1์ ์ถ๋ ฅํ๋ค.
๋ฐฑ์ค ์ค๋ฒ 1.
์์ ์๋ ๊ณจ5์๋ ๋ฏ ํ๋ค
ํ ์ง์ง
ํผ์ ๋๋๋๋ฉด์ ํ์๊ฐ๋์ ์ด์ฌํ ํ์๋ค
๋ง์ถ๊ณ ๋์ ๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ ์ ์ด๋ ๊ฒ ํ์ง..?์ถ์ ๋ถ๋ถ๋ ์์์ ใ ใ ใ
๊ทธ๋๋ ๊ท์ฐฎ์ผ๋๊น ๊ทธ๋ฅ ๋๋๋ค.
์ฌ์ง์ด ์ฒ์์๋ dp์ธ์ค ์์๋ค๊ฐ ํ๋ฉด์ bfs์ธ๊ฑฐ ๊นจ๋ฌ์๋ค.
์ ๋ชฉ์ ํจ์ ์ด์๋ค๋ ๊ฒ๋ ๊นจ๋ฌ์๋ค. (์ฌ์ด?)
1. ์ผ๋จ ์ ๋ ฅ์ฉ ์ด์ฐจ์๋ฐฐ์ด, visited ์ด์ฐจ์๋ฐฐ์ด, ๊ฒฐ๊ณผ ์ ์ฅ์ฉ ์ด์ฐจ์๋ฐฐ์ด,, ์ด๋ ๊ฒ 3๊ฐ๊ฐ ํ์ํ๋ค
2. ์์์ ์ ์ฐพ๋๋ค. ์ ๋ ฅ์ด 2์ธ ๋ถ๋ถ์.. ์ ๋ ฅ๋ฐ์ผ๋ฉด์ ์ฐพ์ผ๋ฉด ๋๋๋ฐ ๋๋ ์ ๋ ฅ ๋ค ๋ฐ๊ณ ๋ค์ ๋ฐ๋ณต๋ฌธ ๋๋ฆฌ๋ฉด์ ํ์ใ ใ
3. makeMap() ์ด๊ฒ bfs ํจ์์ด๋ค. bfs๋ ๋ณ๋ค๋ฅธ๊ฒ ์๋๋ฐ -1 ์ถ๋ ฅํ๋๊ฒ ์๊ทผ ๊น๋ค๋ก์ ์
4. ๋ฐฉ๋ฌธํ ์ ์ด ์๊ณ && ์ ๋ ฅ๊ฐ์ด 1์ธ ๋ถ๋ถ๋ง -1๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
-1์ด ๋์ค๋ ํ ์คํธ ์ผ์ด์ค ํ๋ ๋๋ฆฌ์๋ฉด,
input
15 15
2 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
1 1 1 1 1 1 1 1 1 1 0 1 0 0 0
1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 -> ๋ง์ง๋ง 1์ด 0์ ๋๋ฌ์ธ์ฌ์ ๊ฐํ๊ฒ ๋จ
output
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
11 12 13 14 15 16 17 18 19 20 0 0 0 0 25
12 13 14 15 16 17 18 19 20 21 0 29 28 27 26
13 14 15 16 17 18 19 20 21 22 0 30 0 0 0
14 15 16 17 18 19 20 21 22 23 0 31 32 0 -1 -> -1๋ก ์ถ๋ ฅ.
๋์ ํ์ด
#include <iostream>
#include <queue>
using namespace std;
int n;
int m;
int in[1002][1002] = {0,};
int mat[1002][1002]={0,};
int visited[1002][1002] = {0,};
pair<int,int> searchTwo(){
for (int i = 0; i < n; ++i){
for (int j = 0; j < m; ++j){
if(in[i][j]==2) return {i,j}; // ์ด์ ์๊ฐํด๋ณด๋ ์
๋ ฅํ ๋ ์ด๊ฑธ ์ก์๋ด๋ ๋๋๋ฐ ์์ด๋ ๊ฒ ํ์ง
}
}
return {0,0};
}
bool canGo(int x, int y){
if(visited[x][y]==1 || in[x][y]==0) return false;
if(x<0 || y<0 || x>=n || y>=m) return false;
return true;
}
void makeMap(){
pair<int,int> idx = searchTwo();
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
queue<pair<int, int>> q;
q.push(idx);
mat[idx.first][idx.second] = 0;
while(!q.empty()){
pair<int, int> a = q.front();
q.pop();
for (int i = 0; i < 4; ++i){
int nx = a.first + dx[i];
int ny = a.second + dy[i];
if(idx == make_pair(nx,ny)){
continue;
}
if(canGo(nx, ny)){
q.push(make_pair(nx, ny));
mat[nx][ny] = mat[a.first][a.second] + 1;
visited[nx][ny] = 1;
}
}
}
for (int i = 0; i < n; ++i){
for (int j = 0; j < m; ++j){
if(visited[i][j]==0 && in[i][j]==1) mat[i][j] = -1; // ์ด๊ฑฐ๋๋ฉ ํ์ฐธ ์ฝ์งํจ;;
cout << mat[i][j] << " ";
}
cout << "\n";
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 0; i < n;++i){
for (int j = 0; j < m; ++j){
cin >> in[i][j];
}
}
makeMap();
}
'๐ ์๊ณ ๋ฆฌ์ฆ > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/BOJ] 2225 : ํฉ๋ถํด (DP) (0) | 2023.02.23 |
---|---|
[C++/BOJ] 1697 : ์จ๋ฐ๊ผญ์ง (BFS) (0) | 2023.02.23 |
[C++/BOJ] 2149 : ์ํธ ํด๋ (0) | 2023.02.22 |
[C++/BOJ] 2293 : ๋์ 1 (0) | 2023.02.22 |
[C++/๋ฐฑ์ค] 11052 : ์นด๋ ๊ตฌ๋งคํ๊ธฐ (0) | 2023.02.21 |