https://www.acmicpc.net/problem/5014
일반적인 BFS와는 다르게 상하좌우가 아니라 일직선 상에서의 BFS
를 구현하면 된다.
여기서 주의할 점은,
이다. 이 부분들을 고려해서 구현을 한다면 큰 무리없이 해결할 수 있을 것이다.
#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int f,s,g,u,d;
cin >> f >> s >> g >> u >> d;
if(s == g) {
cout << 0;
return 0;
}
int vist[1000001];
fill(vist,vist+1000001,0);
queue<int> Q;
Q.push(s);
vist[s] = 1;
while(!Q.empty()) {
int fr = Q.front();
Q.pop();
for(int cur: {fr+u,fr-d}) {
if(cur > f || cur <= 0)
continue;
if(vist[cur] != 0)
continue;
if(cur == g) {
vist[g] = vist[fr];
cout << vist[g];
return 0;
}
Q.push(cur);
vist[cur] = vist[fr] + 1;
}
}
cout << "use the stairs";
return 0;
}