본문 바로가기

Algorithm/[BOJ] - Python

[백준] 10971 : 외판원 순회 2 python

 

 

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)