할껀하고놀자

[백준] 외판원 순회 2 본문

[IT]/백준

[백준] 외판원 순회 2

working_hard 2019. 4. 1. 09:23
728x90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.util.Scanner;
 
public class Main {
    static int min = Integer.MAX_VALUE;
    static boolean [] visited;    // 배열 탐색하는 것.
    static int start = 0;    // 시작점.
    static int [][] arr;
    static int n;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        arr= new int [n][n];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                arr[i][j] = sc.nextInt();
            }
        }
        visited = new boolean [n];
        for (int i = 0; i < n; i++) {
            start = i;
            dfs(i,i,0,0);
        }
        System.out.println(min);
    }
    static void dfs(int y,int x,int cnt,int sum) {
        // 순회 다 끝났거나, 다시 되돌아 왔을 때,
        if(cnt == n && start == x) {
            // 최소값을 비교해준다.
            min = Math.min(min, sum);
            return ;
        }
        // for문을 돌면서.
        for (int i = 0; i < n; i++) {
            if(!visited[i]) {
                // 만약 방문하지 않았다면,
                if(arr[x][i]!=0) {
                    // 0이 아니고, x열에서 출발한 것이 min 보다 작을 경우에만
                    visited[i] = true;    // 방문 표시 해주고,
                    dfs(x,i,cnt+1,sum+arr[x][i]);    // 더해준다. 
                    visited[i] = false;
                }
            }
        }
    }
}
 
cs


'[IT] > 백준' 카테고리의 다른 글

[백준] N과 M (2)  (0) 2019.04.01
[백준] 암호 만들기  (0) 2019.04.01
[9095] 1,2,3 더하기  (0) 2018.09.03
[11726] 2xn 타일링 문제  (0) 2018.09.01
[알고리즘]'나는 요리사다' 문제  (0) 2018.04.06
Comments