[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 |