Algorithm/bfs
백준 5014 스타트링크 c++ // bfs 를 사용하라. (dfs는 시간초과)
Mini_96
2024. 3. 4. 03:15
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
1.시행착오
범위가 1~f~1000000이므로
if(f>=0) continue; //정답 , 범위를 정확히 맞춰야함, 안맞추면 f==0일때를 탐색하여 오답이됨
if(f>0) continue; //오답!
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
int f, s, g, u, d,ret=987654321;
int v[1000000 + 4];
int main() {
cin.tie(0);
cin >> f>>s>> g>> u>> d;
queue<int> q;
q.push(s);
v[s] = 1; //초기방문체크
while (q.size()) {
int cur = q.front(); q.pop();
for (auto nxt : { cur + u, cur - d }) {
if (nxt<=0 || nxt>f) continue;
if (v[nxt]) continue;
q.push(nxt);
v[nxt] = v[cur] + 1;
}
}
if (v[g] == 0) {
cout << "use the stairs";
return 0;
}
cout << v[g]-1;
return 0;
}