728x90
๋ฌธ์
https://www.acmicpc.net/problem/1261
์ฝ๋
#include <iostream>
#include <queue>
using namespace std;
void dijkstra();
int M, N;//M: ์ด, N: ํ
int map[101][101];//๋ฌธ์ ์์ ์ฃผ์ด์ง map์ ๋ณด
int cost[101][101];//map์ ๋น์ฉ์ ์ ์ฅํ ๋ฐฐ์ด
int direction[4][2] = { {0,1},{1,0},{0,-1},{-1,0} };//์ค๋ฅธ์ชฝ, ์๋, ์ผ์ชฝ, ์
const int INF = 987654321;
int main() {
cin >> M >> N;//โ
โ
โ
์ฃผ์: ํ, ์ด์ด ์๋๋ผ ์ด, ํ์ผ๋ก ๋ฐ์์ง!
for (int n = 0; n < N; n++) {//ํ
for (int m = 0; m < M; m++) {//์ด
scanf_s("%1d", &map[n][m]);
cost[n][m] = INF;//๋ชจ๋ ์๋ฆฌ์ ๋น์ฉ์ INF๋ก ์ด๊ธฐํํด๋๊ณ ์ต์๋น์ฉ ์ฐพ์๊ฑฐ์.
}
}
dijkstra();
cout << cost[N - 1][M - 1];//๋ฏธ๋ก์ ๋์ธ Nํ M์ด ๊ฐ ์ถ๋ ฅ
}
void dijkstra() {
queue<pair<int, int>> q;//BFS ํ์์ ์ํ queue. x,y์ขํ๋ฅผ ๋ด์์ผ ํ๋ฏ๋ก pair_queue ์ฌ์ฉ.
q.push(make_pair(0, 0));//ํ์์ (0,0)์ขํ์์ ์์
cost[0][0] = 0;//(0,0)์ขํ ๋น์ฉ์ 0์ด์ง
while (!q.empty()) {
int cur_x = q.front().first;//x
int cur_y = q.front().second;//y
q.pop();
for (int i = 0; i < 4; i++) {
int next_x = cur_x + direction[i][0];//๋ค์x
int next_y = cur_y + direction[i][1];//๋ค์y
//๋ค์์ ํ์ํ๋ ค๋ ์ฅ์๊ฐ ๋งต์ ๋ฒ์๋ฅผ ๋์ด์๋ฉด ๋ค๋ฅธ ๋ฐฉํฅ ํ์
if (next_x >= N || next_y >= M || next_x < 0 || next_y < 0) continue;
//๋ค์์ ํ์ํ๋ ค๋ ์ฅ์๊ฐ ๋ฒฝ์ผ ๋, ๋ฒฝ์ ๋ซ๊ณ ์ง๋๊ฐ๋ ๋น์ฉ์ 1
if (map[next_x][next_y] == 1) {
//ํ์ฌ๊น์ง์ ๋น์ฉ์ ๋ฒฝ์ ๋น์ฉ(1)์ ๋ํ ํ ๊ฐ๊ณผ ๋ค์ ์ฅ์์ ๋น์ฉ์ ๋น๊ตํ๋ค.
//"ํ์ฌ๊น์ง์ ๋น์ฉ + ๋ฒฝ์ ๋น์ฉ(1) > ๋ค์ ์ฅ์๊ฐ ๊ฐ์ง ๋น์ฉ" ์ด๋ผ๋ฉด
//๋ค์ ์ฅ์๋ INF ๊ฐ์ด๊ฑฐ๋ ๋ ํฐ ๋น์ฉ์ด ๋ค์ด ์๋ ๊ฒ์ด๋ฏ๋ก
//๋ค์ ์ฅ์์ ๋น์ฉ์ ๋ ์์ ๊ฐ์ธ "ํ์ฌ๊น์ง์ ๋น์ฉ + ๋ฒฝ์ ๋น์ฉ(1) > ๋ค์ ์ฅ์๊ฐ ๊ฐ์ง ๋น์ฉ"์ผ๋ก ๊ฐฑ์ ํ๋ค !
//์ด๋ ๊ฒ ์ต์ ๋น์ฉ์ ๊ณ์ ๊ฐฑ์ ํด์ฃผ๋๊น ๋ฐฉ๋ฌธ์ฒดํฌ ๋ฐฐ์ด์ ๋ฐ๋ก ์๋ง๋ค์ด๋ ๋๋ค!
//(๋ฐฉ๋ฌธ์ํ๋ ์๋ฆฌ์ด๋ฉด INF๊ฐ์ ๊ฐ๊ณ ์๊ฒ์ง~. ๊ทธ๋ฆฌ๊ตฌ ๋ฐฉ๋ฌธํ์ด๋ ๋ ์์ ๊ฐ์ผ๋ก ๊ฐฑ์ ํด์ค์ผ์ง~)
if (cost[next_x][next_y] > cost[cur_x][cur_y] + 1) {
cost[next_x][next_y] = cost[cur_x][cur_y] + 1;
q.push(make_pair(next_x, next_y));
}
}
//๋ค์์ ํ์ํ๋ ค๋ ์ฅ์๊ฐ ๋ฒฝ์ด ์๋ ๋, ์ง๋๊ฐ๋ ๋น์ฉ์ 0
else if (map[next_x][next_y] == 0) {
if (cost[next_x][next_y] > cost[cur_x][cur_y]) {
cost[next_x][next_y] = cost[cur_x][cur_y];
q.push(make_pair(next_x, next_y));
}
}
}
}
}
728x90
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][Baekjoon][DP] 1309๋ฒ ๋๋ฌผ์ (0) | 2021.08.22 |
---|---|
[C++][Baekjoon] 16974๋ฒ ์์ธ ์งํ์ฒ 2ํธ์ (0) | 2021.08.22 |
[C++][ํ๋ก๊ทธ๋๋จธ์ค][2021 ์นด์นด์ค ์ฑ์ฉ์ฐ๊ณํ ์ธํด์ญ] ์ซ์ ๋ฌธ์์ด๊ณผ ์๋จ์ด (0) | 2021.08.22 |
[C++][ํ๋ก๊ทธ๋๋จธ์ค] 2021 ์นด์นด์ค ์ธํด์ญ ๋ฌธ์ , ๊ฑฐ๋ฆฌ๋๊ธฐ ํ์ธํ๊ธฐ (0) | 2021.08.17 |
[C++][BAEKJOON][DP] 2156๋ฒ ํฌ๋์ฃผ ์์ (0) | 2021.08.05 |