Skip to content

Commit 2e7f73d

Browse files
committed
[DP] baekjoon-2098
1 parent c7ca7fb commit 2e7f73d

File tree

4 files changed

+77
-0
lines changed

4 files changed

+77
-0
lines changed

β€ŽREADME.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@
376376
| 30 | | [SWEA-1861 μ •μ‚¬κ°ν˜• λ°©](src/DP/swea1861) | |
377377
| 31 | | [SWEA-1952 수영μž₯](src/DP/swea1952) | |
378378
| 32 | | [JUNGOL-1681 ν•΄λ°€ν„΄ μˆœν™˜νšŒλ‘œ](./src/DP/jo1681) | TSP |
379+
| 33 | | [Baekjoon-2098 μ™ΈνŒμ› 순회](./src/DP/P2098) | TSP |
379380

380381
## Time Complexity
381382

β€Žsrc/DP/P2098/Main.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package DP.P2098;
2+
3+
import java.io.*;
4+
import java.util.*;
5+
6+
public class Main {
7+
8+
static int INF = 160000000;
9+
static int N;
10+
static int[][] W, dp;
11+
12+
public static void main(String[] args) throws Exception {
13+
System.setIn(new FileInputStream("src/DP/P2098/input.txt"));
14+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
15+
16+
N = Integer.parseInt(br.readLine());
17+
W = new int[N][N];
18+
for (int i = 0; i < N; i++) {
19+
StringTokenizer st = new StringTokenizer(br.readLine());
20+
for (int j = 0; j < N; j++) {
21+
W[i][j] = Integer.parseInt(st.nextToken());
22+
}
23+
}
24+
25+
dp = new int[1<<N][N];
26+
for (int i = 0; i < 1 << N; i++) Arrays.fill(dp[i], INF);
27+
28+
System.out.println(TSP(1, 0));
29+
}
30+
31+
static int TSP(int mask, int now) {
32+
if (mask == (1<<N)-1) {
33+
if (W[now][0] > 0) return W[now][0];
34+
return INF;
35+
}
36+
37+
if (dp[mask][now] != INF) return dp[mask][now];
38+
for (int i = 0; i < N; i++) {
39+
if ((mask & 1<<i) == 0 && W[now][i] > 0) {
40+
dp[mask][now] = Math.min(dp[mask][now], TSP(mask|1<<i, i) + W[now][i]);
41+
}
42+
}
43+
return dp[mask][now];
44+
}
45+
}

β€Žsrc/DP/P2098/README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## [baekjoon-2098] μ™ΈνŒμ› 순회
2+
3+
![image](https://user-images.githubusercontent.com/22045163/112101265-b37ebb00-8be9-11eb-8302-789243835946.png)
4+
5+
### μ™ΈνŒμ› 순회 문제
6+
7+
μ™ΈνŒμ› 순회 λ¬Έμ œλŠ” λΉ„νŠΈλ§ˆμŠ€ν¬ + DP λ₯Ό μ΄μš©ν•œ λ¬Έμ œμ΄λ‹€. 풀이 및 μ½”λ“œλ₯Ό μ΄ν•΄ν•œ ν›„, μ™Έμš°λŠ” 것이 쒋은 것 κ°™λ‹€.
8+
9+
```java
10+
int TSP(int mask, int now) {
11+
if (mask == (1<<N)-1) {
12+
if (W[now][0] > 0) return W[now][0];
13+
return INF;
14+
}
15+
16+
if (dp[mask][now] != INF) return dp[mask][now];
17+
for (int i = 0; i < N; i++) {
18+
if ((mask & 1<<i) == 0 && W[now][i] > 0) {
19+
dp[mask][now] = Math.min(dp[mask][now], TSP(mask|1<<i, i) + W[now][i]);
20+
}
21+
}
22+
return dp[mask][now];
23+
}
24+
```
25+
26+
![image](https://user-images.githubusercontent.com/22045163/112101291-bc6f8c80-8be9-11eb-97ee-5add4fa8208f.png)

β€Žsrc/DP/P2098/input.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
4
2+
0 10 15 20
3+
5 0 9 10
4+
6 13 0 12
5+
8 8 9 0

0 commit comments

Comments
Β (0)