알고리즘/백준

[백준 11404] 플로이드 C++

겜도리도리 2022. 9. 27. 19:33
반응형

문제

백준 11404 플로이드 C++

풀이

전형적인 플로이드-와샬 알고리즘 문제이다.

3중 포문을 통해 모든 정점에서부터 모든 정점까지의 최소 거리를 구한다.

소스 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <algorithm>
using namespace std;
 
const int INF = 987654321;
int n, m;
int dist[101][101];
 
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    cin >> n;
    cin >> m;
 
    // 시작 지점, 도착 지점, 비용
    int start, end, cost;
 
    // 초기화
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            dist[i][j] = INF;
        }
    }
 
    for (int i = 0; i < m; i++)
    {
        cin >> start >> end >> cost;
        dist[start][end= min(dist[start][end], cost);
    }
 
    // 거쳐가는 노드
    for (int k = 1; k <= n; k++)
    {
        // 시작 노드
        for (int i = 1; i <= n; i++)
        {
            // 도착 노드
            for (int j = 1; j <= n; j++)
            {
                if (i == j)
                    continue;
 
                dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
            }
        }
    }
 
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (dist[i][j] == INF)
            {
                cout << 0 << ' ';
            }
            else
            {
                cout << dist[i][j] << ' ';
            }
        }
        cout << '\n';
    }
 
    return 0;
}
cs
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 2240] 자두나무 C++  (0) 2022.11.06
[백준 10026] 적록색약 C++  (1) 2022.10.06
[백준 11725] 트리의 부모 찾기 C++  (0) 2022.09.20
[백준 1647] 도시 분할 계획 C++  (0) 2022.08.12
[백준 13459] 구슬 탈출 C++  (0) 2022.08.10