쌓고 쌓다
[백준] 운동 1956번 C++ 풀이 본문
https://www.acmicpc.net/problem/1956
#include <iostream>
#include <vector>
using namespace std;
int V, E;
int arr[401][401];
int res = 987654321;
int main(void)
{
int a, b, c;
cin >> V >> E;
for (int i = 0; i < E; i++)
{
cin >> a >> b >> c;
arr[a][b] = c;
}
for(int i=1;i<=V;i++)
for (int j = 1; j <= V; j++)
{
if (arr[i][j] == 0)
arr[i][j] = 987654321;
}
for (int k = 1; k <= V; k++)
for (int i = 1; i <= V; i++)
for (int j = 1; j <= V; j++)
if (arr[i][j] > arr[i][k] + arr[k][j])
{
arr[i][j] = arr[i][k] + arr[k][j];
if (i == j) // 자기에게 돌아오는 길
res = min(res, arr[i][j]);
}
if (res == 987654321) // 987654321이면 길이 없음
cout << "-1";
else
cout << res;
}
플로이드 와샬 알고리즘을 사용하면 된다~
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 문자열 집합 14425번 C++ 풀이 (0) | 2021.12.26 |
---|---|
[백준] 풍선 터뜨리기 2346번 C++ 풀이 (0) | 2021.12.25 |
[백준] 카드 구매하기2 16194번 C++ 풀이 (0) | 2021.12.23 |
[백준] 1로 만들기2 12852번 C++ 풀이 (0) | 2021.12.22 |
[백준] 그림 1926번 C++ 풀이 (0) | 2021.12.21 |
Comments