본문 바로가기

OJ

[BOJ] 17182 우주 탐사선 (JAVA)

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

 

17182번: 우주 탐사선

우주 탐사선 ana호는 어떤 행성계를 탐사하기 위해 발사된다. 모든 행성을 탐사하는데 걸리는 최소 시간을 계산하려 한다. 입력으로는 ana호가 탐색할 행성의 개수와 ana호가 발사되는 행성의 위

www.acmicpc.net

플로이드 워셜 + DFS로 해결했습니다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringBuilder sb = new StringBuilder();
    static StringTokenizer st;
    static int N, K, result = Integer.MAX_VALUE;
    static int[][] dist;
    static boolean[] visited;

    public static void main(String[] args) throws Exception {

        st = new StringTokenizer(br.readLine(), " ");
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());
        dist = new int[N][N];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            for (int j = 0; j < N; j++) {
                dist[i][j] = Integer.parseInt(st.nextToken());
            }
        } // end of input

        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                for (int k = 0; k < N; k++) {
                    dist[j][k] = Math.min(dist[j][k], dist[j][i] + dist[i][k]);
                }
            }
        } // Floyd Warshall

        visited = new boolean[N];
        visited[K] = true;
        find(1, K, 0);

        System.out.print(result);

    }

    static void find(int cnt, int index, int sum) {

        if(cnt == N) {
            result = Math.min(result, sum);
            return;
        }

        for (int i = 0; i < N; i++) {

            if(!visited[i]) {

                visited[i] = true;
                find(cnt + 1, i, sum + dist[index][i]);
                visited[i] = false;

            }

        }

    }
	
}

'OJ' 카테고리의 다른 글

[BOJ] 16918 봄버맨 (JAVA)  (0) 2023.01.05
[BOJ] 1026 보물 (JAVA)  (0) 2023.01.04
[BOJ] 2750 수 정렬하기 (JAVA)  (0) 2023.01.02
[BOJ] 9237 이장님 초대 (JAVA)  (2) 2023.01.01
[BOJ] 1966 프린터 큐 (JAVA)  (0) 2022.12.31