# 유형 : 탐색
# 조건문만 잘 체크하면 쉽게 해결, 맨 처음에 min 범위를 잘못 지정해서 10%에서 계속 틀려서 로직이 틀린줄 알고 한참 걸렸다. Limit 설정에 신경을 써야한다.. dfs로 탐색을 하여, count가 N개이고, 시작지점과 마지막지점이 같을때 체크해주면 된다.
package bj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class p10971 {
static int N;
static int arr[][];
static int min=Integer.MAX_VALUE;
static boolean visit[];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
arr = new int[N][N];
visit = new boolean[N];
for(int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for(int j=0; j<N; j++) {
arr[i][j] = Integer.parseInt(st.nextToken());
}
}
for(int i=0; i<N; i++) {
dfs(i,i,0,0);
}
System.out.println(min);
}
public static void dfs(int start, int i, int cnt, int sum) {
if(cnt == N && start==i) {
min = Math.min(min, sum);
return;
}
for(int idx=0; idx<N; idx++) {
if(arr[i][idx]==0)
continue;
if(!visit[i] && arr[i][idx]>0) {
visit[i] = true;
sum += arr[i][idx];
dfs(start, idx, cnt+1, sum);
visit[i] = false;
sum -= arr[i][idx];
}
}
}
}
'백준' 카테고리의 다른 글
#백준_11054 가장 긴 바이토닉 부분 수열 - Java (0) | 2020.01.25 |
---|---|
#백준_2186 문자판 - Java (0) | 2020.01.23 |
#백준_2632 피자판매 - Java (0) | 2020.01.22 |
#백준_1525 퍼즐 - Java (0) | 2020.01.21 |
#백준_7453 합이 0인 네 정수 - Java (0) | 2020.01.20 |