1. 程式人生 > 其它 >AcWing 1100. 抓住那頭牛

AcWing 1100. 抓住那頭牛

題目傳送門

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int n, k;
int q[N];
int dist[N];
int Min = INF;
void bfs() {
    //初始化距離陣列-1
    memset(dist, -1, sizeof dist);

    int hh = 0, tt = -1;
    q[++tt] = n; //加入起點n
    dist[n] = 0; // n距離出發點0個長度

    while (hh <= tt) {
        int t = q[hh++];
        if (t == k) {
            Min = dist[k];
            return;
        }
        if (t + 1 < N && dist[t + 1] == -1) {
            dist[t + 1] = dist[t] + 1;
            q[++tt] = t + 1;
        }
        if (t - 1 >= 0 && dist[t - 1] == -1) {
            dist[t - 1] = dist[t] + 1;
            q[++tt] = t - 1;
        }
        if (t * 2 < N && dist[t * 2] == -1) {
            dist[t * 2] = dist[t] + 1;
            q[++tt] = t * 2;
        }
    }
}

int main() {
    //農夫起始位於點N,牛位於點K
    cin >> n >> k;
    bfs();
    cout << Min << endl;
    return 0;
}