티스토리 뷰

백준

백준 소스코드 [C++] 13549 숨바꼭질 3

Hani_Levenshtein 2020. 9. 3. 19:12

www.acmicpc.net/problem/13549

 

13549번: 숨바꼭질 3

수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 ��

www.acmicpc.net

백준 소스코드 [C++] 13549 숨바꼭질 3

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
typedef long long ll;
using namespace std;
int V, E, W, v, e;
bool check[100001];
void dijkstra(int src) {
	priority_queue <pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q, t;
	pair<int, int> p;
	q.push({ 0,src });
	check[src] = true;
	while (q.empty() != true) {
		p = q.top();
		if (p.second == e) break;
		q.pop();
		if (p.second * 2 <= 100000 && check[p.second * 2] == false) {
			q.push({ p.first,p.second * 2 });
			check[p.second * 2] = true;
		}
		if (p.second + 1 <= 100000 && check[p.second + 1] == false) {
			q.push({ p.first + 1,p.second + 1 });
			check[p.second + 1] = true;
		}
		if (0 <= p.second - 1 && check[p.second - 1] == false) {
			q.push({ p.first + 1,p.second - 1 });
			check[p.second - 1] = true;
		}
	}
	cout << p.first;
	return;
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> v >> e;
	dijkstra(v);
	return 0;
}