1520 내리막 길


1. 목적지( n, m ) 이면 1반환


2. 한번도 방문하지 않은곳이면 dfs탐색


3. 방문했던 곳이면 d[x][y] 반환


4. ( 1, 1 ) 부터 시작.


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
#include <iostream>
#include <algorithm>
using namespace std;
 
int n, m;
int map[502][502];
int d[502][502];
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,1,-1 };
 
int dfs(int x,int y) {
    if (x == n && y == m) {
        return 1;
    }
 
    //(x,y)가 한번도 방문하지 않았을 경우만 탐색
    if (d[x][y] == -1) {
        d[x][y] = 0;
 
        for (int i = 0; i < 4; i++) {
            int ax = x + dx[i];
            int ay = y + dy[i];
 
            if (map[ax][ay] == 0continue;
 
            if (map[x][y] > map[ax][ay]) {
                d[x][y] += dfs(ax, ay);
            }
        }
    }
    return d[x][y];
}
 
int main() {
    cin >> n >> m;
 
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> map[i][j];
            d[i][j] = -1;
        }
    }
 
    d[n][m] = 1;
    dfs(11);
 
    cout << d[1][1<< endl;
}
cs

 

'BOJ::문제풀이' 카테고리의 다른 글

9019 DSLR  (0) 2018.04.13
1018 체스판 다시 칠하기  (0) 2018.04.12
1937 욕심쟁이 판다  (0) 2018.04.08
14620 꽃길  (0) 2018.04.05
1963 소수경로  (0) 2018.04.02

+ Recent posts