https://www.acmicpc.net/problem/17182
[난이도] 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 |