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

 

17182번: 우주 탐사선

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

www.acmicpc.net

 

 

[난이도] Gold2
[유형] 플로이드 와샬

[풀이]
플로이드 와샬을 이용해 우주선간 최단 거리를 미리 구해놓은 뒤
방문할 순서를 순열을 이용해 구해준 뒤 각 N!개의 순열에 대해 최단 거리를 계산해주면 됩니다.

 

#include <cstdio>
#include <algorithm>
using namespace std;
int N,K,dist[11][11],seq[11],ans=9e8;
int main(){
    scanf("%d%d",&N,&K);
    for(int i=0;i<N;i++)
        for(int j=0;j<N;j++) scanf("%d",&dist[i][j]);

    for(int k=0;k<N;k++)
        for(int i=0;i<N;i++)
            for(int j=0;j<N;j++)
                dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
    int j=0;
    for(int i=0;i<N;i++) if(i!=K) seq[j++]=i;
    do{ 
        int t=dist[K][seq[0]];
        for(int i=1;i<N-1;i++) t+=dist[seq[i-1]][seq[i]];
        ans=min(t,ans);
    }while(next_permutation(seq,seq+N-1));
    printf("%d",ans); 
}


https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold2/17182.cpp

+ Recent posts