Skip to content

Commit 9102403

Browse files
committed
1102
1 parent b870d06 commit 9102403

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

.idea/modules.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

BOJ/silver/BOJ10971/BOJ10971.iml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module type="JAVA_MODULE" version="4">
3+
<component name="NewModuleRootManager" inherit-compiler-output="true">
4+
<exclude-output />
5+
<content url="file://$MODULE_DIR$">
6+
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
7+
</content>
8+
<orderEntry type="inheritedJdk" />
9+
<orderEntry type="sourceFolder" forTests="false" />
10+
</component>
11+
</module>

BOJ/silver/BOJ10971/src/Main.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.lang.reflect.Array;
5+
import java.util.Arrays;
6+
import java.util.StringTokenizer;
7+
8+
9+
public class Main {
10+
static int [][] tsp;
11+
static int n;
12+
public static void main(String[] args) throws IOException {
13+
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
14+
n= Integer.parseInt(br.readLine());
15+
StringTokenizer st;
16+
tsp= new int [n][n];
17+
for (int i = 0; i < n; i++) {
18+
st = new StringTokenizer(br.readLine());
19+
int j=0;
20+
while (st.hasMoreTokens()){
21+
tsp[i][j]=Integer.parseInt(st.nextToken());
22+
j++;
23+
}
24+
}
25+
long [][] dp = new long [n][(1<<n)-1];
26+
for (int i = 0; i < n; i++) {
27+
Arrays.fill(dp[i],Integer.MAX_VALUE);
28+
}
29+
System.out.println(TSP(dp, 0,1));
30+
31+
}
32+
private static long TSP(long [][] dp, int city, int bit){
33+
if(bit==((1<<n)-1)){ // 1을 왼쪽으로 1비트씩 5번이동 ex) 1 << 4 = 10000(2) = 16 -> 우리의 최대값 : 1111(2) 이므로 1 빼기
34+
if(tsp[city][0]==0){
35+
return Integer.MAX_VALUE;
36+
}
37+
return tsp[city][0];
38+
39+
}
40+
if(dp[city][bit]!=Integer.MAX_VALUE){
41+
return dp[city][bit];
42+
}
43+
for (int i = 0; i < n; i++) { // 현재 도시(city)에서 각 i의 도시로 이동한 경우에 대해 DFS 수행
44+
if((bit & (1<<i))==0 && tsp[city][i]!=0){//다시 그 도시를 방문하는 경우 예외처리
45+
dp[city][bit]=Math.min(dp[city][bit],TSP(dp, i, bit|(1<<i))+tsp[city][i]);
46+
}
47+
}
48+
return dp[city][bit];
49+
}
50+
}

0 commit comments

Comments
 (0)