알고리즘 모음(C++)

백준 11657 - 타임머신(C++) 본문

백준

백준 11657 - 타임머신(C++)

공대생의 잡다한 사전 2023. 4. 24. 23:29

문제 링크입니다. https://www.acmicpc.net/problem/11657

 

11657번: 타임머신

첫째 줄에 도시의 개수 N (1 ≤ N ≤ 500), 버스 노선의 개수 M (1 ≤ M ≤ 6,000)이 주어진다. 둘째 줄부터 M개의 줄에는 버스 노선의 정보 A, B, C (1 ≤ A, B ≤ N, -10,000 ≤ C ≤ 10,000)가 주어진다. 

www.acmicpc.net

밸만 포드 알고리즘을 이용해 푸는 문제입니다.

 

자세한 것은 코드를 참고해주세요.

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <vector>
#include <cstring>
#include <cmath>
#define P pair<int, int>
#define F first
#define S second
#define INF 987654321

using namespace std;

int N, M;
vector<pair<P, int>> connect;
long long Distance[501];

void Bellman_Ford(){
    Distance[1] = 0;
    for(int i = 1; i <= N - 1; i++){
        for(int j = 0; j < connect.size(); j++){
            int x = connect[j].F.F;
            int y = connect[j].F.S;
            int cost = connect[j].S;
            if(Distance[x] == INF) continue;
            if(Distance[y] > Distance[x] + cost){
                Distance[y] = Distance[x] + cost;
            }
        }
    }
    for(int i = 0; i < connect.size(); i++){
        int x = connect[i].F.F;
        int y = connect[i].F.S;
        int cost = connect[i].S;
        if(Distance[x] == INF) continue;
        if(Distance[y] > Distance[x] + cost){
            cout << "-1" << "\n";
            return;
        }
    }
    for(int i = 2; i <= N; i++){
        if(Distance[i] == INF) cout << "-1" << "\n";
        else cout << Distance[i] << "\n";
    }
}

void solve(){
    for(int i = 1; i <= N; i++){
        Distance[i] = INF;
    }
    Bellman_Ford();
}

int main(){
    cin.tie(0);
    cout.tie(0);
    cin >> N >> M;
    for(int i = 1; i <= M; i++){
        int x, y, cost;
        cin >> x >> y >> cost;
        connect.push_back({{x,y}, cost});
    }
    solve();
    return 0;
}

 

 

질문 및 조언은 댓글을 남겨주세요

'백준' 카테고리의 다른 글

백준 10159 - 저울(C++)  (2) 2023.04.25
백준 1956 - 운동(C++)  (0) 2023.04.24
백준 2458 - 키 순서(C++)  (0) 2023.04.24
백준 4991 - 로봇 청소기(C++)  (0) 2023.04.23
백준 2234 - 성곽(C++)  (2) 2023.04.21