알고리즘/SWAE

최소합

황성안 2021. 4. 14. 10:46
728x90
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
def dfs(y, x):
    global sub_result, result
 
    if result < sub_result:
        return
    if y == n - 1 and x == n - 1:
        result = sub_result
        return
    for d in range(2):
        y_tmp = y + dy[d]
        x_tmp = x + dx[d]
        if (y_tmp < n and x_tmp < n) and ((y_tmp, x_tmp) not in visited):
            visited.append((y_tmp, x_tmp))
            sub_result += number[y_tmp][x_tmp]
            dfs(y_tmp, x_tmp)
            visited.remove((y_tmp, x_tmp))
            sub_result -= number[y_tmp][x_tmp]
 
 
T = int(input())
for tc in range(1, T + 1):
    n = int(input())
    number = [list(map(int, input().split())) for _ in range(n)]
    visited = []
 
    dy = [0, 1]
    dx = [1, 0]
    sub_result, result = number[0][0], 9876521
    dfs(0, 0)
    print("#{} {}".format (tc, result))
cs
728x90