- toc {:toc}
λ¬Έμ
μλΉμ΄λ λμκ³ΌΒ μ¨λ°κΌμ§μ νκ³ μλ€. μλΉμ΄λ νμ¬ μ N(0 β€ N β€ 100,000)μ μκ³ , λμμ μ K(0 β€ K β€ 100,000)μΒ μλ€.Β μλΉμ΄λ κ±·κ±°λ μκ°μ΄λμ ν μ μλ€. λ§μ½, μλΉμ΄μ μμΉκ° XμΌ λ κ±·λλ€λ©΄ 1μ΄ νμ X-1 λλ X+1λ‘ μ΄λνκ² λλ€. μκ°μ΄λμ νλ κ²½μ°μλ 1μ΄ νμ 2*Xμ μμΉλ‘ μ΄λνκ² λλ€.
μλΉμ΄μ λμμ μμΉκ° μ£Όμ΄μ‘μ λ, μλΉμ΄κ° λμμ μ°Ύμ μ μλ κ°μ₯ λΉ λ₯Έ μκ°μ΄ λͺ μ΄ νμΈμ§ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
첫 λ²μ§Έ μ€μ μλΉμ΄κ° μλ μμΉ Nκ³Ό λμμ΄ μλ μμΉ Kκ° μ£Όμ΄μ§λ€.Β Nκ³Ό Kλ μ μμ΄λ€.
μΆλ ₯
μλΉμ΄κ° λμμ μ°Ύλ κ°μ₯ λΉ λ₯Έ μκ°μ μΆλ ₯νλ€.
μΆμ²:https://www.acmicpc.net/problem/1697
νμ΄
1μ°¨μμΌ λΏ BFSκ° μ¬μ©λλ κ²μ λκ°λ€.
BFSλ κ°μ₯ λΉ λ₯Έ κ² λΆν° μμ°¨μ μΌλ‘ νμ λ€μ΄μ€κΈ° λλ¬Έμ κ·Έλ λ€.
#include <bits/stdc++.h>
using namespace std;
int dist[100002];
int n, k;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
fill(dist, dist+100001, -1);
dist[n] = 0;
queue<int> q;
q.push(n);
while(dist[k] == -1){
auto cur = q.front(); q.pop();
for(int i : {cur-1, cur+1, cur*2}){
if(i < 0 || i > 100000) continue;
if(dist[i] != -1) continue;
dist[i] = dist[cur] + 1;
q.push(i);
}
}
cout << dist[k];
}