๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/Note

[C++, ํ…œํ”Œ๋ฆฟ] ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ

by ์•ˆ์ฃผํ˜• 2022. 5. 13.

ํ”Œ๋กœ์ด๋“œ-์™€์ƒฌ 

#include <bits/stdc++.h>
#define INF 1e9 // ๋ฌดํ•œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฐ’์œผ๋กœ 10์–ต์„ ์„ค์ •

using namespace std;

// ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜(N), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜(M)
// ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ 500๊ฐœ๋ผ๊ณ  ๊ฐ€์ •
int n, m;
// 2์ฐจ์› ๋ฐฐ์—ด(๊ทธ๋ž˜ํ”„ ํ‘œํ˜„)๋ฅผ ๋งŒ๋“ค๊ธฐ
int graph[501][501];

int main(void) {
    cin >> n >> m;

    // ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ํ…Œ์ด๋ธ”์„ ๋ชจ๋‘ ๋ฌดํ•œ์œผ๋กœ ์ดˆ๊ธฐํ™”
    for (int i = 0; i < 501; i++) {
        fill(graph[i], graph[i] + 501, INF);
    }

    // ์ž๊ธฐ ์ž์‹ ์—์„œ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”
    for (int a = 1; a <= n; a++) {
        for (int b = 1; b <= n; b++) {
            if (a == b) graph[a][b] = 0;
        }
    }

    // ๊ฐ ๊ฐ„์„ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ž…๋ ฅ ๋ฐ›์•„, ๊ทธ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”
    for (int i = 0; i < m; i++) {
        // A์—์„œ B๋กœ ๊ฐ€๋Š” ๋น„์šฉ์€ C๋ผ๊ณ  ์„ค์ •
        int a, b, c; cin >> a >> b >> c;
        graph[a][b] = c;
    }
    
    // ์ ํ™”์‹์— ๋”ฐ๋ผ ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ˆ˜ํ–‰
    for (int k = 1; k <= n; k++) {
        for (int a = 1; a <= n; a++) {
            for (int b = 1; b <= n; b++) {
                graph[a][b] = min(graph[a][b], graph[a][k] + graph[k][b]);
            }
        }
    }

    // ์ˆ˜ํ–‰๋œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ
    for (int a = 1; a <= n; a++) {
        for (int b = 1; b <= n; b++) {
            // ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋ฌดํ•œ(INFINITY)์ด๋ผ๊ณ  ์ถœ๋ ฅ
            if (graph[a][b] == INF) cout << "INFINITY" << ' ';
            // ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ถœ๋ ฅ
            else cout << graph[a][b] << ' ';
        }
        cout << '\n';
    }
}

๋Œ“๊ธ€