알고리즘💻/그래프(DFS&BFS)

BOJ 10971번: 외판원 순회 2

호프 2021. 5. 12. 01:20

 

www.acmicpc.net/problem/10971

 

10971번: 외판원 순회 2

첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j

www.acmicpc.net

dfs와 백트래킹을 이용하여 풀었는데 왜 틀리다고 나올까..  삽질하다가 마지막에 시작했던 노드로 다시 돌아오는 부분을 검사할 때 cnt==3이라고 조건을 달아둔 걸 발견했다. 당연히 N-1이라고  해야 하는 것을ㅠㅠ

 

import sys

N = int(sys.stdin.readline())
W = []
for _ in range(N):
    W.append(list(map(int, sys.stdin.readline().split())))

check = [False]*N
ans = 10**9
tmp = 0
cnt = 0

def dfs(i, start):
    global tmp, cnt, ans
    check[i] = True
    
    if (cnt==N-1):
        if (W[i][start]!=0):
            ans = min(ans, tmp+W[i][start])
        return

    for n in range(N):
        if (check[n] == False and W[i][n]!=0):
             tmp+=W[i][n]
             cnt+=1
             
             dfs(n, start)
             
             check[n] = False   
             tmp-=W[i][n]
             cnt-=1
    return

for i in range(N):
    dfs(i,i)
    check = [False]*N
    cnt = 0
    tmp = 0
print(ans)

pypy3 통과