중요 지식
Floyd Warshall - 플로이드 와샬 알고리즘은 두 정점의 최단 경로를 구하는 알고리즘이다
코드
#include <iostream>
#define MAX 101
#define MIN(a,b) a<b ? a:b
#define INF 1000
using namespace std;
int N, M;
int map[MAX][MAX];
void initMap(){
for(int i = 0; i <= N; i++){
for(int j = 0; j <= N; j++){
map[i][j] = INF;
if(i == j) map[i][j] = 0;
}
}
}
void floyd(){
for(int k = 0; k <= N; k++){
for(int i = 0; i <= N; i++){
for(int j = 0; j <= N; j++){
map[i][j] = MIN(map[i][j], map[i][k] + map[k][j]);
}
}
}
}
int main(){
int minV = INF, minN;
cin >> N >> M;
initMap();
for(int i = 0; i < M; i++){
int a, b;
cin >> a >> b;
map[a][b] = map[b][a] = 1;
}
floyd();
for(int i = 1; i <= N; i++){
int sum = 0;
for(int j = 1; j <= N; j++){
sum += map[i][j];
}
if(minV > sum) {
minV = sum;
minN = i;
}
}
cout << minN;
return 0;
}
풀이
플로이드 알고리즘 외에도 다익스트라 알고리즘도 쓸 수 있지만 플로이드 알고리즘이 더 쉽고 간편하다
'프로그래밍 문제집 > 백준' 카테고리의 다른 글
1927번-최소 힙 (0) | 2022.02.11 |
---|---|
1541번-잃어버린 괄호 (0) | 2022.02.09 |
1107번-리모컨 (0) | 2022.02.07 |
1074번-Z (0) | 2022.02.03 |
1012번-유기농 배추 (0) | 2022.02.02 |