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
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold2] 2879 : 코딩은 예쁘게 (C++) (0) | 2022.03.03 |
---|---|
[BOJ/백준][Gold2] 2307 : 도로검문 (C++) (0) | 2022.03.03 |
[BOJ/백준][Gold2] 17090 : 미로 탈출하기 (C++) (0) | 2022.03.03 |
[BOJ/백준][Gold2] 1949 : 우수 마을 (C++) (0) | 2022.02.26 |
[BOJ/백준][Gold2] 17837 : 새로운 게임 2 (C++) (0) | 2022.02.26 |