농담곰담곰이의곰담농

10971. 외판원 순회 2

by 브이담곰

https://www.acmicpc.net/problem/10971

✔ 유형 : 완전 탐색

✔ 문제 풀이: 

 

# 외판원 순환

# 입력

N = int(input())

W=[[*map(int,input().split())] for _ in range(N)] # 정리 해두기 N행 배열 입력 받는 법

min_cost = 1e9
visited = [False for _ in range(N)]  # 방문 여부
temp  = list()

def go(depth, cost)->int:
    global min_cost 

    if(cost >= min_cost) : return 
    
    if( depth == N ): 
        if W[temp[N-1]][temp[0]] == 0 : return
        #print(f'{next} to {start}: {distance}+{W[next][start]}')
        #print(f"distance = {distance}")
        min_cost= min(min_cost, cost + W[temp[N - 1]][temp[0]])  # 최솟값 갱신
        return 0 
    
    
    for i in range(N):

        if depth == 0 or (visited[i] == False and W[temp[depth-1]][i] != 0):
            temp.append(i)
            visited[i] = True # visited check
        
            go( depth + 1, cost + W[temp[depth-1]][i])
        
            temp.pop()
            visited[i] = False
        
        
    return 
        


        

go(0, 0)

   
print(min_cost)

'Coding Test > Baekjoon' 카테고리의 다른 글

11866. 요세푸스 문제 0  (0) 2024.07.10
2468. 안전 영역  (0) 2024.07.10
2309. 일곱 난쟁이  (0) 2024.07.10
1181. 단어 정렬  (0) 2024.07.10
2751. 수 정렬하기 2  (0) 2024.07.10

블로그의 정보

농담곰담곰이의곰담농

브이담곰

활동하기