https://www.acmicpc.net/problem/10971
dfs로 모든 경우의 수를 구해준 뒤 각각의 경우에 수에 따라 값을 넣어주고 최소값을 출력하도록 만들어 줬다.
import java.io.*;
import java.util.*;
public class Main {
public static int n, MIN = 10000000;
public static int[][] a;
public static int[] arr;
public static boolean[] visit;
public static StringBuilder sb = new StringBuilder();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
a = new int[n][n];
arr = new int[n];
visit = new boolean[n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
a[j][i] = sc.nextInt();
}
}
dfs(0);
sb.append(MIN);
System.out.println(sb);
}
public static void dfs(int depth) {
if (depth == n) {
int cnt = 0;
for (int i = 1; i < n; i++) {
if(a[arr[i-1]][arr[i]] != 0)
cnt += a[arr[i-1]][arr[i]];
else
return;
}
if(a[arr[n - 1]][arr[0]] != 0)
cnt += a[arr[n - 1]][arr[0]];
else
return;
if(MIN > cnt) {
MIN = cnt;
}
return;
}
for (int i = 0; i < n; i++) {
if (!visit[i]) {
visit[i] = true;
arr[depth] = i;
dfs(depth + 1);
visit[i] = false;
}
}
}
}
'코딩테스트 > JAVA' 카테고리의 다른 글
[백준 JAVA] 1260번: DFS와 BFS (2) | 2024.07.23 |
---|---|
[백준 JAVA] 6603번: 로또 (1) | 2024.07.22 |
[백준 JAVA] 10819번: 차이를 최대로 (1) | 2024.07.22 |
[백준 JAVA] 10974번: 모든 순열 (1) | 2024.07.22 |
[백준 JAVA] 10973번: 이전 순열 (0) | 2024.07.22 |