카테고리 없음
[백준] 15661 - 링크와 스타트 [JAVA]
odong2
2024. 5. 8. 16:57

코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[][] arr;
static boolean[] visited;
static int N;
static int min = Integer.MAX_VALUE;
// idx 인덱스, count 조합 개수(재귀 깊이)
static void dfs(int count) {
if (count == N) {
int start = 0;
int link = 0;
for (int i = 0; i < N; i++) {
for (int j = i + 1; j < N; j++) {
if (visited[i] != visited[j]) continue;
if (visited[i])
start += arr[i][j] + arr[j][i];
else
link += arr[i][j] + arr[j][i];
}
}
int diff = Math.abs(start - link);
if (diff < min) min = diff;
return;
}
visited[count] = true;
dfs(count + 1);
visited[count] = false;
dfs(count + 1);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
arr = new int[N][N];
visited = new boolean[N];
// 입력값 초기화
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
dfs(0);
System.out.println(min);
}
}