https://swexpertacademy.com/main/learn/course/lectureProblemViewer.do
표 이해가 많이 힘들었던 문제
def recur(cur, total):
global ans
if cur == N: # 마지막 위치에서 0까지 이동
ans = min(ans, total + arr[p1[N-1]][0])
return
for i in range(N):
if visited[i]: continue
visited[i] = 1
p1.append(i) # 0 - 1 - 2 - 0 이런식으로 이동
# arr[p1[cur-1][p1[cur]]
0 - 1
1 - 2
# 이런 느낌
recur(cur + 1, total + arr[p1[cur-1]][p1[cur]])
p1.pop()
visited[i] = 0
for t in range(int(input())):
N = int(input())
arr = [list(map(int, input().split())) for _ in range(N)]
visited = [0] * N
visited[0] = 1
ans = 1<<31
p1 = [0] # 순회 하는 인덱스 저장
recur(1, 0)
print(f'#{t+1} {ans}')