https://www.acmicpc.net/problem/10971
10971번: 외판원 순회 2
첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j
www.acmicpc.net
[난이도] Silver2
[유형] 백트래킹
[풀이]
N제한이 10밖에 안되기 때문에 순회할 수 있는 모든 경우를 백트래킹 해주면 된다.
import java.io.BufferedReader
import java.io.InputStreamReader
import java.lang.Integer.min
import java.util.*
var N=0
val cost = Array(10,{Array(10){0}})
val visit = Array(10){false}
var ans=987654321
fun sol(start:Int,n:Int,sum:Int,cnt:Int){
visit[n]=true
//println("n:${n}, sum:${sum}, cnt:${cnt}")
if(cnt==N && cost[n][start]>0){
ans=min(ans,sum+cost[n][start])
}
for(i in 0 until N){
if(cost[n][i]>0 && !visit[i]){
sol(start,i,sum+cost[n][i],cnt+1)
}
}
visit[n]=false
}
fun main() = with(BufferedReader(InputStreamReader(System.`in`))){
N=readLine().toInt()
for(i in 0 until N){
var ip = readLine().split(' ').map{it.toInt()}
for(j in 0 until N) cost[i][j]=ip[j]
}
for(i in 0 until N) {
sol(i,i, 0, 1)
}
println(ans)
}
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver2/10971.cpp
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold2] 10775 : 공항 (C++) (0) | 2021.07.10 |
---|---|
[BOJ/백준][Silver2] 9184 : 신나는 함수 실행 (Kotlin) (0) | 2021.07.10 |
[BOJ/백준][Silver2] 4963 : 섬의 개수 (Kotlin) (0) | 2021.07.10 |
[BOJ/백준][Silver2] 4948 : 베르트랑 공준 (Kotlin) (0) | 2021.07.10 |
[BOJ/백준][Silver4] 10773 : 제로 (Kotlin) (0) | 2021.07.10 |