알고리즘

[백준/BFS/C++] 5014번 스타트링크

데메즈 2023. 1. 11. 09:19
728x90
반응형

https://www.acmicpc.net/problem/5014

 

5014번: 스타트링크

첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다.

www.acmicpc.net

유의할 점

엘레베이터로 이동가능한지 여부를 판단할 때 visited[] 를 이용한다

#include <bits/stdc++.h>

using namespace std;

const int MAX = 1000001;
int f, s, g, u, d;
bool visited[MAX];
int path[MAX];
int result = 2e9;
queue<int> q;

void bfs(int v){
    visited[v] = true;
    q.push(v);
    path[v] = 0;

    while(!q.empty()){
        int x = q.front();
        if(x==g) break;
        q.pop();
        if(x+u>0 && x+u<=f && !visited[x+u]){
            visited[x+u] = true;
            q.push(x+u);
            path[x+u] = path[x] + 1;
        }
        if(x-d>0 && x-d<=f && !visited[x-d]){
            visited[x-d] = true;
            q.push(x-d);
            path[x-d] = path[x] + 1;
        }
    }
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);
    // f:전체 층, s:현재 층, g: 목표 층
    cin >> f >> s >> g >> u >> d;

    bfs(s);

    if(visited[g]) cout << path[g];
    else cout << "use the stairs";

    return 0;
}
728x90
반응형