[c++] BOJ 1753 :: ์ตœ๋‹จ๊ฒฝ๋กœ

๋‚œ์ด๋„ : ๊ณจ๋“œ 5

๊ฑธ๋ฆฐ ์‹œ๊ฐ„ : 1์‹œ๊ฐ„ ๋ฐ˜ ์ด์ƒ (์˜ค๋ฅ˜ ์ฐพ๊ธฐ)

 

๋ฌธ์ œ

์ตœ๋‹จ๊ฒฝ๋กœ ๋ฌธ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ

 

ํ’€์ด


์ฝ”๋“œ

#include <iostream>
#include <vector>
#include <queue>

using namespace std;

int main() {
    // ์ž…๋ ฅ
    // v, e๋Š” 10^5, 10^6์ดํ•˜
    int V; int E;
    cin >> V >> E;
    int start; // ์‹œ์ž‘ ์ •์ 
    cin >> start;

    vector<vector<pair<int, int>>> edge(V+1, vector<pair<int,int>>(0));

    for (int i = 0; i < E; i++) { //10^6
        int from; int to; int val;
        cin >> from >> to >> val;
        edge[from].push_back(make_pair(to, val));
    }

    vector<int> memo(V+1, 1e9);
    vector<int> visited(V + 1, 0);
    priority_queue<pair<int, int>> que; // ์ฃผ๋ณ€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ๊ฐ„์„ ์˜ ํฌ๊ธฐ ์œ ์ง€ (val, to)
    memo[start] = 0;
    que.push(make_pair(0,start));

    while (que.size()!=0) {
        auto node = que.top(); que.pop(); // ๊ฐ€์žฅ ๊ฐ€์ค‘์น˜ ๋‚ฎ์€ ์•„์ด ๋ฐ๋ ค์˜ค๊ธฐ
        int val = -node.first; int from = node.second;
        if (visited[from]!=0) { // ์ด๋ฏธ tree์— ํฌํ•จ๋œ ๋…ธ๋“œ์ด๋ฉด ๋‹ค์‹œ ํ•˜์ง€ x
            continue;
        }
        visited[from] = 1;

        auto nodeEdge = edge[from];
        for (int i = 0; i < nodeEdge.size(); i++) {
            int to = nodeEdge[i].first; int val2 = nodeEdge[i].second;
            if (memo[to] > memo[from] + val2) {
                memo[to] = memo[from] + val2;
                que.push(make_pair(-memo[to], to)); // -๋กœ ์ง‘์–ด๋„ฃ์–ด์„œ ์ตœ์†Œ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ํ•˜๊ธฐ
            }
        }
    }

    for (int i = 1; i < V+1; i++) {
        if (memo[i] == 1e9) {
            cout << "INF";
        }
        else {
            cout << memo[i];
        }
        cout << '\n'; // ์—ฌ๊ธฐ๋ฅผ endl๋กœ ํ•˜๋ฉด ์‹œ๊ฐ„ ์ดˆ๊ณผ..
    }
}

 

๊ฒฐ๊ณผ

๋งˆ์ง€๋ง‰ ์ถœ๋ ฅ ์‹œ endl์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋œฌ๋‹ค. '\n'์„ ์‚ฌ์šฉํ•˜์ž..

๋ฐฑ์ค€ judge๋Š” ์ž…์ถœ๋ ฅ ์‹œ๊ฐ„๋„ ํฌํ•จํ•˜๋ฉฐ endl์€ ์ถœ๋ ฅ๋ฒ„ํผ๋ฅผ ๋น„์›Œ์•ผํ•ด์„œ ๋Š๋ฆฌ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•