- toc {:toc}
λ¬Έμ νμΈ
1103: κ²μ λ¬Έμ νμΈνκΈ°
νμ΄
λμ μ΄ 4 λ°©ν₯μΌλ‘ μ΄λνλ©΄μ μμ§μΌ μ μλ μ΅λμ κ²½μ°μ μλ₯Ό ꡬνλ λ¬Έμ μ΄λ€.
- μ
λ ₯μ΄ space κ° μ£Όμ΄μ Έμ λ€μ΄μ€λ κ²μ΄ μλλΌ ν λ²μ λ€μ΄μ¨λ€.
- string μΌλ‘ λ°μμ§ int λ‘ λ°μμ§ μ ν. λ λ€ μκ΄μκΈ΄ νλ€.
- board μ λλ μ«μ μ μ₯
- μ΅λμ κ²½μ°μ μλ₯Ό ꡬνλ λ¬Έμ β λͺ¨λ κ²½μ°μ μλ₯Ό νμ
ν΄μ μ΅λμ κ²½μ°μ μ μ°μΆ (DFS)
- κ²½μ°μ μ μ μ₯μ μν΄ dist λ°°μ΄ μμ±ν΄ μ΄λ 거리 μ μ₯
- μμ μΌλ‘λΆν° κ°λ₯ν λ¨Ό κ³³μΌλ‘ μ¬κ·μ μΌλ‘ μ΄λνλ©° -1 μΈ dist κ°μ 0 μΌλ‘ μ΄κΈ°ν
- λ¨Ό κ³³μμλΆν° μ΄λκ°λ₯ν κ²½μ°μ μλ₯Ό μΈλ©° μμ μΌλ‘ λμμ€λ λ°©μ
- κ³ λ €ν΄μΌ νλ μμΈ μ¬ν
- 무νλ² μμ§μ΄λ κ²½μ° β vis λ‘ λ°©λ¬Έν κ²½μ° 1 λ‘ μ²΄ν¬. λ€μ λ°©λ¬Ένλ©΄ 무νλ² μ΄λνλ€ κ°μ
- λμ μ΄ κ΅¬λ©μ λΉ μ§κ±°λ 보λ λ°κΉ₯μΌλ‘ λκ°λ κ²½μ°
#include <bits/stdc++.h>
using namespace std;
int board[50][50];
int vis[50][50];
int dist[50][50];
int dx[4] = {0, 1, 0, -1};
int dy[4] = {1, 0, -1, 0};
int N, M;
int dfs(int x, int y){
if (board[x][y] == 0 || x < 0 || x >= N || y < 0 || y >= M) return 0;
if (vis[x][y] == 1) {
cout << -1 << endl;
exit(0);
}
if (dist[x][y] != -1) return dist[x][y];
vis[x][y] = 1;
dist[x][y] = 0;
int mat = board[x][y];
for(int dir = 0; dir<4; dir++){
int nx = x + dx[dir] * mat;
int ny = y + dy[dir] * mat;
if(dist[x][y]<dfs(nx, ny)+1){
dist[x][y] = dfs(nx, ny)+1;
}
}
vis[x][y] = 0;
return dist[x][y];
}
int main(){
ios::sync_with_stdio(true);
cin.tie(0); cout.tie(0);
cin >> N >> M;
for (int row=0; row<N; row++){
string str;
cin >> str;
for (int col=0; col<M; col++){
dist[row][col] = -1;
int val;
if (str[col]=='H') val = 0;
else {
val = int(str[col]) - 48;
}
board[row][col] = val;
}
}
int res = dfs(0,0);
cout << res << endl;
return 0;
}