[ 문제 ]
10971번: 외판원 순회 2
첫째 줄에 도시의 수 N이 주어진다. (2 ≤ N ≤ 10) 다음 N개의 줄에는 비용 행렬이 주어진다. 각 행렬의 성분은 1,000,000 이하의 양의 정수이며, 갈 수 없는 경우는 0이 주어진다. W[i][j]는 도시 i에서 j
www.acmicpc.net
[ 접근방법 ]
흔한 백트래킹 문제다.
0번 도시에서 출발하여 다시 되돌아오는 비용을 일일히 비교한다.
[ 소스코드 ]
#include <iostream>
using namespace std;
int n, tsp[11][11], ans = 10000000;
bool chk[11];
void f(int idx, int x, int cnt){
if(idx == n){
if(!tsp[x][0]) return;
cnt += tsp[x][0];
ans = ans > cnt ? cnt : ans;
return;
}
for(int i = 1; i < n; i++){
if(!tsp[x][i] || chk[i])continue;
chk[i] = true;
f(idx + 1, i, cnt + tsp[x][i]);
chk[i] = false;
}
return;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)cin >> tsp[i][j];
f(1, 0, 0);
cout << ans;
return 0;
}
'PS' 카테고리의 다른 글
[ 백준 / C++ ] 18111 : 마인크래프트 (0) | 2024.04.18 |
---|---|
[ 백준 / C++ ] 11758 : CCW (0) | 2024.04.17 |
[ 백준 / C++ ] 1253 : 좋다 (0) | 2024.04.16 |
[ 백준 / C++ ] 16486 : 운동장 한 바퀴 (0) | 2024.04.12 |
[ 백준 / C++ ] 9465 : 스티커 (0) | 2024.04.11 |