백준 알고리즘/다이나믹 프로그래밍
백준 5014번 C++
paysmile
2019. 1. 14. 01:30
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
int f, s, g, u, d;
int visited[1000001];
int bfs(int s) {
queue<int> q;
q.push(s);
visited[s] = 1;
while (!q.empty()) {
int x = q.front();
q.pop();
if (x == g)
return visited[x]-1;
int movestairs[2] = { x + u, x - d };
for (int k = 0; k < 2; k++) {
int ma = movestairs[k];
if (ma >= 1 && ma <= f){
if (visited[ma] ==0 ) {
q.push(ma);
visited[ma] = visited[x] + 1;
}
}
}
}
return -1;
}
int main(void) {
cin >> f >> s >> g >> u >> d;
memset(visited, 0, sizeof(visited));
int ans = bfs(s);
if (ans == -1)
cout << "use the stairs";
else
cout << ans;
}