문제 링크: https://www.acmicpc.net/problem/1389
아이디어 : 플로이드 와샬 알고리즘
의견 : 처음에는 DFS에 분류되어 있어, DFS로 풀려했는데, 도저히 안돼서 플로이드 와샬로 품.
#define MAX_INF 100000
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int nGraph[101][101];
int N, M;
void FloydWarshall()
{
for (int k = 1; k <= N; k++)
{
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
if (nGraph[i][k] != 0 && nGraph[k][j] != 0 && i != j)
{
if (nGraph[i][j] == 0)
{
nGraph[i][j] = nGraph[i][k] + nGraph[k][j];
}
else
{
nGraph[i][j] = min(nGraph[i][j], nGraph[i][k] + nGraph[k][j]);
}
}
}
}
}
}
int main(void)
{
cin >> N >> M;
int nFriend1, nFriend2;
for (int i = 1; i <= M; i++)
{
cin >> nFriend1 >> nFriend2;
nGraph[nFriend2][nFriend1] = 1;
nGraph[nFriend1][nFriend2] = 1;
}
FloydWarshall();
int min = MAX_INF;
int sum = 0;
int ans = 0;
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
{
sum += nGraph[i][j];
}
if (min > sum)
{
min = sum;
ans = i;
}
sum = 0;
}
cout << ans << endl;
}
'개발 > 백준' 카테고리의 다른 글
백준 1325번: 효율적인 해킹 (0) | 2019.09.24 |
---|---|
백준 1963번: 소수 경로 (0) | 2019.09.02 |
백준 11724번: 연결 요소의 개수 (0) | 2019.08.29 |
백준 11403번: 경로 찾기 (0) | 2019.08.28 |
백준 7562번: 나이트의 이동 (0) | 2019.08.28 |