Algorithm/Baekjoon

[Python] 10971. 외판원 순회 2

느낌표 공장장 2022. 1. 15. 09:00
n = int(input()) # 도시의 수
cost = [list(map(int, input().split())) for _ in range(n)] # 비용 행렬
visited = [False for _ in range(n)] # 도시 방문 리스트 (모든 도시를 방문해야 함)
answer = 1e9 # 최소 비용이므로 정답 크게크게
def dfs(s, now, total):
global answer
if answer < total: # 가지치기
return # 이미 비용이 기존에 저장한 순회 경로 비용보다 커졌다면 돌아가
if s == now and False not in visited: # 모든 도시를 방문했고, 시작지점으로 돌아왔다면
if total < answer: # 최소 비용으로 갱신
answer = total
return
for i in range(n):
if not cost[now][i]: # 해당 도시로 갈 수 없는 경우 제외
continue
if visited[i]: # 이미 방문한 도시라면 제외
continue
visited[i] = True # 해당 도시 방문처리
dfs(s, i, total + cost[now][i]) # 다음 도시 가보기 및 비용 더하기
visited[i] = False # 방문처리 해제
dfs(0, 0, 0)
print(answer)

'Algorithm > Baekjoon' 카테고리의 다른 글

[Python] 1339. 단어 수학  (0) 2022.01.15
[Python] 2098. 외판원 순회 1  (0) 2022.01.15
[Python] 14496. 그대, 그머가 되어  (0) 2022.01.14
[Python] 20309. 트리플 소트  (0) 2022.01.14
[Python] 소가 길을 건너간 이유 5  (0) 2022.01.14