Mini

백준 5014 스타트링크 c++ // bfs 를 사용하라. (dfs는 시간초과) 본문

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;
}