이 문제를 풀면서 알아야할 점은
이 두 아이디어만 가지면 조금 풀이가 쉬워진다..!!
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)