이 문제를 풀면서 알아야할 점은
이 두 아이디어만 가지면 조금 풀이가 쉬워진다..!!
import Foundation
let n = Int(readLine()!)!
var W = Array(repeating: Array(repeating: 0, count: n), count: n)
for i in 0..<n {
    let a = readLine()!.split(separator:" ").map {Int(String($0))!}
    W[i] = a
}
var minSum = 10000000
var result = [Int]()
var mode = Array(repeating: true, count: n)
func recur(_ present: Int, _ destination: Int) {
    if result.count == n && present == destination {
        minSum = min(minSum, result.reduce(0, {$0+$1})
        return
    }
    
    for i in 0..<n {
        if mode[i] == true && W[present][i] > 0 {
            result.append(W[present][i]
            mode[i] = false
            recur(i,destination)
            result.removeLast()
            mode[i] = true
        }
        
    }
}
recur(0,0)
print(minSum)