π λ¬Έμ
https://www.acmicpc.net/problem/14889
π λμ νμ΄
μ,,, μμ§ DFSμ λν κ°λ μ΄ μ μ‘νμ§ μμ건κ°. μμλ μ¬κ·λΆλΆμ μκ°νλλ° μ’.. νλ€μλ€.. λλ체 μ¬κ·λ₯Ό μ΄λ»κ² κ·Έλ κ² λ°λ‘λ°λ‘ μκ°ν΄λ΄λκ±°μ§..? μλκ° λ€λ€ λμ κ°μκ°?
μ΄μ¨λ μ΄λ² λ¬Έμ λ, μ λ ₯λ°λ Nλͺ μ μ¬λλ€μ 1/2λ‘ μͺΌκ°μ, λν΄μ£Όλ κ°μ λν μ°¨μ΄μ μ΅μκ°μ ꡬνλ κ²μ΄λ€. μ°μ λ°©λ¬Έ μ¬λΆλ₯Ό νλ¨ν΄μ κ³μ μ‘°ν©μ λ°κΏκ°λ©° νμΈν΄μ£Όμ΄μΌνκΈ° λλ¬Έμ DFS μ¬κ·λ₯Ό μ¬μ©ν΄μ ν μ μκ² κ΅¬λ κΉμ§ μκ°ν μ μμλ€.
Nλͺ μ μ¬λμ΄λΌκ³ μΉλ©΄, μ΄λ―Έ νμ΄ κ΅¬μ±λ μ¬λμ λ νμ ꡬμ±ν μμλ€. μ΄κ²μ λ°©λ¬Έμ²λ¦¬ VIsitedλ°°μ΄μ μ μ₯νλ€. κ·Έλ¦¬κ³ λͺλͺ μ μ¬λκΉμ§ λλ¬νλμ§λ νΈλ¦¬μ depthλ‘ νλ¨ν κ²μ΄λ€. νλ¨κ³μ© μ¬κ·λ₯Ό μ§ννλ©΄μ Depthκ° +1μ© μ¦κ°λκ³ , μ΄ depthκ° n/2κ° λλ€λ©΄ dfsλ₯Ό νμΆνλλ‘ λ§λ€μ΄μΌνλ€. νμΆνκΈ° μ μλ, visitedκ° trueμΈ λλͺ μ startνμ λ£μ΄μ£Όκ³ , falseμΈ λλͺ μ linkνμ λ£μ΄μ€ κ²μ΄λ€!
μ΄ κ³Όμ μ κ·Έλ¦ΌμΌλ‘ κ·Έλ €λ³΄λ©΄μ μ½λλ₯Ό ꡬμ±ν΄λ³΄μ.
π μ λ΅μ½λ
import Foundation
let n = Int(readLine()!)!
var s = [[Int]]()
var visited = Array(repeating: false, count: n)
var minResult = 999999
for _ in 0..<n {
s.append(readLine()!.split(separator: " ").map{ Int($0)! })
}
private func dfs(depth: Int, start: Int) {
if depth == n/2 {
var teamStart = 0
var teamLink = 0
for i in 0..<n {
for j in 0..<n {
if visited[i], visited[j] {
teamStart += s[i][j]
}
if !visited[i], !visited[j] {
teamLink += s[i][j]
}
}
}
minResult = min(minResult, abs(teamLink - teamStart))
return
}
for i in start..<n {
if !visited[i] {
visited[i] = true
dfs(depth: depth + 1, start: i)
visited[i] = false
}
}
}
dfs(depth: 0, start: 0)
print(minResult)