https://www.acmicpc.net/problem/13549
1. 문제
그냥 bfs : 메모리초과? 가 났다.
bfs는 비용이 모두 동일할때만 사용 가능하다.
해결 : 비용이 적은것부터 탐색하도록 pq에 담는다.
2. 전체코드
#include <bits/stdc++.h>
using namespace std;
int n, k;
int vis[100000 + 4];
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> n >>k;
//비용, 정점
priority_queue <pair<int, int>,
vector<pair<int,int>>,
greater<>> pq;
//비용이 적은것부터 탐색함
pq.push({ 0,n});
while (pq.size()) {
auto cur = pq.top(); pq.pop();
//cout << cur.first << " " << cur.second << "\n";
if (cur.second < 0 || cur.second >= 100000 + 4) continue;
if (cur.second == k) {
cout << cur.first;
return 0;
}
if (vis[cur.second]) continue;
vis[cur.second] = 1;
pq.push({ cur.first + 1, cur.second + 1 });
pq.push({ cur.first + 1, cur.second - 1 });
pq.push({ cur.first, cur.second*2 });
}
return 0;
}
'Algorithm > bfs' 카테고리의 다른 글
백준 9205 맥주마시면서걸어가기 c++ // bfs, 출력시 "\n을 빼먹지마라.." (0) | 2024.03.09 |
---|---|
백준 5014 스타트링크 c++ // bfs 를 사용하라. (dfs는 시간초과) (0) | 2024.03.04 |
프로그래머스 거리두기확인하기 c++ // bfs, check함수 활용방법, 문자열을 배열처럼 활용하는방법 (0) | 2023.11.22 |
프로그래머스 가장 먼 노드 c++ // bfs, 이동거리체크는 bfs (0) | 2023.10.18 |
프로그래머스 게임맵 최단거리 c++ // 최단거리는 bfs (0) | 2023.10.11 |