Post

[BOJ] 10971 - 외판원 순회 2

[백준] 10971 - 외판원 순회 2

접근

완전탐색으로 모든 경우의 수를 다 돌아보고 최솟값을 갱신하면 된당.

소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <algorithm>
#define INF 987654321
using namespace std;

int dist[15][15], n;
bool visited[15];

int tsp(int now, int cnt) {
	// 다음 도시로 모두 탐색하고 그중 가장 짧은 경로를 선택
	if (cnt == n) {
		return dist[now][1] ? dist[now][1] : INF;
	}
	int rtn = INF;
	visited[now] = true;
	for (int i = 1; i <= n; i++) {
		if (visited[i] || !dist[now][i]) continue;
		rtn = min(rtn, dist[now][i] + tsp(i, cnt + 1));
	}
	visited[now] = false;
	return rtn;
}

int main(void) {
	scanf("%d", &n);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			scanf("%d", dist[i] + j);
		}
	}

	printf("%d", tsp(1, 1));
	return 0;
}
This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.