-
백준 2021 - 최소 환승 경로, C++,쾌락없는 책임 (공부)/알고리즘 문제풀이 2022. 1. 5. 22:45반응형
#include <iostream> #include <queue> #include <vector> #include <cstring> using namespace std; int n, l; int start_station, end_station; int station[200001]; vector<int> route[200001]; // 호선 - 역 연결 벡터 int Search_Station(){ queue<int> q; station[start_station] = 0; q.push(start_station); while(!q.empty()){ int cur = q.front(); q.pop(); if(cur == end_station) { if(station[cur] - 1 > 0) return station[cur] - 1; else return 0; } for(int i = 0; i < route[cur].size(); i++){ int next_station = route[cur][i]; if(station[next_station] > -1) continue; // 환승 else 같은 노선 if(next_station > 100000) station[next_station] = station[cur] + 1; else station[next_station] = station[cur]; q.push(next_station); } } return -1; } int main(){ // init ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); memset(station, -1, sizeof(station)); // input cin >> n >> l; for(int i = 1; i <= l; i++){ while(true){ int input_station; cin >> input_station; if(input_station == -1) break; route[input_station].push_back(i+100000); // 노선 route[i+100000].push_back(input_station); // 노선에 해당하는 역 } } cin >> start_station >> end_station; cout << Search_Station() << endl; }
문제에서 주어지는 역과 환승역들을 한 배열에서 관리를 하는 방식으로 처리를 했습니다. 백준의 5214번 문제와 비슷한 방식으로 그 문제가 조금 더 이해하기가 쉬워 그 문제를 먼저 풀이하면 좋을 것 같습니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 14284 - 간선 이어가기2, C++, 다익스트라 (0) 2022.01.16 백준 16118 - 달빛 여우, C++ ,BFS (0) 2022.01.09 백준 5214 - 환승, C++, BFS (0) 2022.01.05 백준 15483 - 최소 편집 거리, C++, DP (0) 2021.12.31 백준 1167 - 트리의 지름, C++, DFS (0) 2021.11.23