Skip to content

Commit 59e4adc

Browse files
authored
[20250402] BOJ / G1 / 외판원 순회 / 설진영
1 parent ecb64b6 commit 59e4adc

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
```java
2+
import java.io.BufferedReader;
3+
import java.io.IOException;
4+
import java.io.InputStreamReader;
5+
import java.util.*;
6+
7+
public class Main {
8+
static int N;
9+
static int[][] map, dp;
10+
static final int MAX_VALUE = 16_000_001;
11+
12+
public static void main(String[] args) throws IOException {
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
StringTokenizer st;
15+
16+
N = Integer.parseInt(br.readLine());
17+
map = new int[N][N];
18+
dp = new int[N][(1<<N) - 1];
19+
for(int i = 0; i < N; i++) Arrays.fill(dp[i], -1);
20+
21+
for (int i = 0; i < N; i++) {
22+
st = new StringTokenizer(br.readLine());
23+
for (int j = 0; j < N; j++) {
24+
map[i][j] = nextInt(st);
25+
}
26+
}
27+
28+
System.out.println(dfs(0, 1));
29+
}
30+
31+
static int dfs(int now, int visited) {
32+
if (visited == (1 << N) - 1) {
33+
if (map[now][0] == 0) return MAX_VALUE;
34+
return map[now][0];
35+
}
36+
37+
if(dp[now][visited] != -1) return dp[now][visited];
38+
dp[now][visited] = MAX_VALUE;
39+
40+
for (int i = 0; i < N; i++) {
41+
if((visited & (1 << i)) == 0 && map[now][i] != 0) {
42+
dp[now][visited] = Math.min(dfs(i, visited | (1 << i)) + map[now][i], dp[now][visited]);
43+
}
44+
}
45+
46+
return dp[now][visited];
47+
}
48+
49+
private static int nextInt(StringTokenizer st) {
50+
return Integer.parseInt(st.nextToken());
51+
}
52+
}
53+
```

0 commit comments

Comments
 (0)