-
[๋ฐฑ์ค(BOJ) 2178๋ฒ] ๋ฏธ๋ก ํ์ (C++)PS(Problem Solving)/C++ 2022. 1. 23. 23:17๋ฐ์ํ
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2178
๋ฌธ์ ์ ๋ณด
์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ ์ ์ N, M(2 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ M๊ฐ์ ์ ์๋ก ๋ฏธ๋ก๊ฐ ์ฃผ์ด์ง๋ค. ๊ฐ๊ฐ์ ์๋ค์ ๋ถ์ด์ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ผ ํ๋ ์ต์์ ์นธ ์๋ฅผ ์ถ๋ ฅํ๋ค. ํญ์ ๋์ฐฉ์์น๋ก ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ๋ง ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ค.
ํ์ด
์ด ๋ฌธ์ ๋ BFS์ ์์ฉ ๋ฌธ์ ๋ก ๋ค์ฐจ์ ๋ฐฐ์ด์์์ ๊ฑฐ๋ฆฌ ์ธก์ ๋ฌธ์ ๋ค!
์์ค ์ฝ๋
#include <bits/stdc++.h> using namespace std; #define X first #define Y second string board[102]; int dist[102][102]; // ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด int n, m; int dx[4] = { 1, 0, -1, 0 }; int dy[4] = { 0, 1, 0, -1 }; int main(void) { ios::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for (int i = 0; i < n; i++) { cin >> board[i]; } for (int i = 0; i < n; i++) { fill(dist[i], dist[i] + m, -1); // ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ ๋ฏธ๋ฆฌ -1๋ก ์ด๊ธฐํํด๋๋ฉด vis ๋ฐฐ์ด์ ๋ฐ๋ก ๋ฌ์ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ ํ์๊ฐ ์๋ค! } queue<pair<int, int>> Q; Q.push({0, 0}); dist[0][0] = 0; // ์์ ์ง์ ์ด๋ฏ๋ก ๊ฑฐ๋ฆฌ 0 while (!Q.empty()) { auto cur = Q.front(); Q.pop(); for (int dir = 0; dir < 4; dir++) { int nx = cur.X + dx[dir]; int ny = cur.Y + dy[dir]; if (nx < 0 || nx >= n || ny < 0 || ny >= m) { continue; } if (dist[nx][ny] >= 0 || board[nx][ny] != '1') { continue; // ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ฅํ ๋ฐฐ์ด์ -1๋ก ์ด๊ธฐํ ํด๋์ผ๋ฏ๋ก ๋ง์ฝ -1 ๋ณด๋ค ํฐ ๊ฐ์ด ์ ์ฅ๋์ด ์์ผ๋ฉด ์ด๋ฏธ ๋ฐฉ๋ฌธํด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐ ์ํ์! } dist[nx][ny] = dist[cur.X][cur.Y] + 1; // ๊ฑฐ๋ฆฌ๋ 1์นธ์ฉ ๋์ด๋๋ค. Q.push({nx, ny}); } } cout << dist[n - 1][m - 1] + 1; // ๋ฌธ์ ๋ (1, 1)๋ถํฐ ์์ํ๋ค๊ณ ํ์ผ๋ฏ๋ก 1์นธ์ ๋ํด์ค์ผ ํ๋ค! return 0; }
๋ฐ์ํ