import sys
input = sys.stdin.readline
def dfs(depth, start, value):
global min_value
# n개의 도시를 모두 방문했을 때 시작점으로 돌아가는 길이 있다면
if depth == n and graph[start][0]!=0:
# 이번 탐색에 소요된 비용과 지금까지 구해둔 최소비용과 비교함
min_value = min(min_value,value+graph[start][0])
return
# 이미 최소비용을 넘겼다면 더 탐색할 필요가 없음
if value>min_value:
return
for i in range(n):
# 아직 방문하지 않았고 갈 수 있는 도시가 있다면
if visited[i]==0 and graph[start][i]!=0:
# 방문하고 거기서 탐색을 더 함
visited[i]=1
dfs(depth+1,i,value+graph[start][i])
# 방문 해제
visited[i]=0
n = int(input())
min_value = sys.maxsize
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
visited = [0]*n
visited[0]=1
dfs(1,0,0)
print(min_value)
'Algorithm > [BOJ] - Python' 카테고리의 다른 글
[백준] 10814 : 나이순 정렬 python (0) | 2023.08.29 |
---|---|
[백준] 1181 : 단어 정렬 (0) | 2023.08.29 |
[백준] 1697 : 숨바꼭질 python (0) | 2023.08.26 |
[백준] 2573 : 빙산 python (0) | 2023.08.25 |
[백준] 5014 : 스타트링크 python (0) | 2023.08.25 |