본문 바로가기
카테고리 없음

[Java] 백준 - 10971번: 외판원 순회 2

by C0MPAS 2024. 6. 13.

6월 13일(목) - 브루트 포스(10971번)

https://www.acmicpc.net/problem/10971


최초 생각 정리


문제점


풀이

(풀이출처 -> https://velog.io/@kimmjieun/백준-10971번-외판원-순회-2)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import java.util.*;

public class Main {

    static int N;
    static int[][] map;
    static boolean[] visited;
    static int answer;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        N = Integer.parseInt(br.readLine());
        map = new int[N][N];
        for(int i=0; i<N; i++)
        {
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=0; j<N; j++)
            {
                map[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        answer = Integer.MAX_VALUE;
        visited = new boolean[N];
        for(int i=0; i<N; i++)
        {
            visited[i] = true;
            tsp(i, i, 0, 0);// Traveling Salesman Problem
        }

        System.out.println(answer);
    }

    public static void tsp(int start, int now, int sum, int count){
        if(count == N-1)
        {
            if(map[now][start] != 0)
            {
                sum = sum + map[now][start];
                answer = Math.min(answer, sum);
            }
            return;
        }

        for(int i=0; i<N; i++)
        {
            if(!visited[i] && map[now][i] != 0)
            {
                visited[i] = true;
                tsp(start, i, sum+map[now][i], count+1);
                visited[i] = false;
            }
        }
    }
}

댓글