본문 바로가기

BOJ/C++

게임

도움이 된 TC

5 7
3994995
9999999
4H99399
9999999
2993994

ans = 6

3 4
3552
5555
2553

ans = -1

4 3
133
5HH
HHH
21H

ans = 5

4 4
12H3
2H3H
HHHH
41H2

5 5
13HH2
2HHHH
HHHH2
HHHHH
3HHH4

5 5
13HH1
HHHH3
3HH2H
HHHHH
2HH31

5 5
4H3H2
HHHHH
HHHHH
HH2HH
1HHH4

5 5
4H3H2
HHHHH
HHHHH
HH2HH
1HHH4

3 3
2H1
3H2
HHH

3 3
2H1
HH2
HHH


3 3
2H1
HH1
HHH

5 5
4HHH9
HHHHH
HHH12
HHHHH
3HH2H

ans = 6

6 7
12HHHHH
2214HHH
H1HHHHH
H4H9H2H
HHHHHHH
HHH2HHH

ans = 7
 

*방문 했던 좌표를 또 가게 된다면 무한 루프가 될 가능성이 있음 -> 바로 -1을 출력하고 종료한다.

*마지막에 +1을 더해주는 이유는 맨 처음 (0,0)에서 굴리는 횟수를 더해주기 위해서이다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <vector>
 
using namespace std;
int n, m;
int map[51][51];
int dx[4= {-1,1,0,0}, dy[4= {0,0,-1,1};
bool visited[51][51];
int dp[51][51];
 
bool check(int x, int y) {
    if (x < 0 || x >= n || y < 0 || y >= m || map[x][y] == -1return false;
    return true;
}
int dfs(int x, int y) {
    
    if (dp[x][y]) return dp[x][y];
 
    int &ret = dp[x][y];
 
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i] * map[x][y];
        int ny = y + dy[i] * map[x][y];
 
        if (check(nx, ny)) {
            if (visited[nx][ny]) {
                cout << -1 << '\n';
                exit(0);
            }
            
            visited[nx][ny] = true;
            ret = max(ret,dfs(nx, ny)+1);
            visited[nx][ny] = false;
 
        }
    }
    return ret;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
 
    cin >> n >> m;
 
    for (int i = 0; i < n; i++) {
        string s; cin >> s;
 
        for (int j = 0; j < m; j++) {
            if (s[j] == 'H') map[i][j] = -1;
            else {
                map[i][j] = s[j] - '0';
            }
        }
    }
 
    
    visited[0][0= true;
 
    cout << dfs(0,0)+1 << '\n';
 
   
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

'BOJ > C++' 카테고리의 다른 글

[BOJ] 가르침  (0) 2020.02.04
[BOJ] 가운데를 말해요  (0) 2020.02.04
[BOJ] 단어 수학  (0) 2020.02.03
[BOJ] 동물원  (0) 2020.02.03
[BOJ] 궁금한 민호  (0) 2020.01.27