NΓMν¬κΈ°μ λ°°μ΄λ‘ ννλλ λ―Έλ‘κ° μλ€.
λ―Έλ‘μμ 1μ μ΄λν μ μλ μΉΈμ λνλ΄κ³ , 0μ μ΄λν μ μλ μΉΈμ λνλΈλ€. μ΄λ¬ν λ―Έλ‘κ° μ£Όμ΄μ‘μ λ, (1, 1)μμ μΆλ°νμ¬ (N, M)μ μμΉλ‘ μ΄λν λ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. ν μΉΈμμ λ€λ₯Έ μΉΈμΌλ‘ μ΄λν λ, μλ‘ μΈμ ν μΉΈμΌλ‘λ§ μ΄λν μ μλ€.
μμ μμμλ 15μΉΈμ μ§λμΌ (N, M)μ μμΉλ‘ μ΄λν μ μλ€. μΉΈμ μ λμλ μμ μμΉμ λμ°© μμΉλ ν¬ν¨νλ€.
첫째 μ€μ λ μ μ N, M(2 β€ N, M β€ 100)μ΄ μ£Όμ΄μ§λ€. λ€μ Nκ°μ μ€μλ Mκ°μ μ μλ‘ λ―Έλ‘κ° μ£Όμ΄μ§λ€. κ°κ°μ μλ€μ λΆμ΄μ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
첫째 μ€μ μ§λμΌ νλ μ΅μμ μΉΈ μλ₯Ό μΆλ ₯νλ€. νμ λμ°©μμΉλ‘ μ΄λν μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N, M;
string board[102];
cin >> N >> M;
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
for(int i=0;i<N;i++){
for(int j=0;j<M;j++)
cin >>board[i][j];
}
int dist[102][102];
for(int i=0;i<N;i++) fill(dist[i], dist[i]+M, -1);
queue<pair<int, int>> q;
q.push({0, 0});
dist[0][0] = 0;
while(!q.empty()) {
// 1) μλ‘μ΄ pairλ₯Ό λ§λ€μ΄ κ°μ₯ μμ μλ κ°μ λμ
νλ€
pair<int, int> current = q.front();
// 2) λ°©λ¬Έμ νμΈν μ’νλ μμ νλ€.
q.pop();
for(int i=0;i<4;i++) {
// μνμ’μ° μ’ν
int moveX = current.first + dx[i];
int moveY = current.second + dy[i];
// 3) μνμ’μ°λ‘ μμ§μΈ μ’νκ° 0λ³΄λ€ μκ±°λ, κ°λ‘ μΈλ‘ μ΅λ κΈΈμ΄λ₯Ό λμ΄μλ©΄ continue
if(moveX < 0 || moveX >=N || moveY <0 || moveY >=M) continue;
// 4) μμ§μΈ μ’νμμ 0,0 λΆν°μ κ±°λ¦¬κ° -1μ΄ μλκ±°λ(λ°©λ¬Έν μ μμ), boardκ° 1μ΄ μλλ©΄ continue
if(dist[moveX][moveY] >= 0 || board[moveX][moveY]!='1') continue;
// μΈμ ν νλ ¬μ΄λ―λ‘ 1λ§ λν΄μ€
dist[moveX][moveY] = dist[current.first][current.second] + 1;
q.push({moveX, moveY});
}
}
return 0;
}