抓住這頭牛

2021-09-26 05:35:03 字數 1005 閱讀 3285

農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點 (0<=n<=100000),牛位於點 k(0<=k<=100000)。農夫有兩種移動方式:

從x移動到x-1或x+1,每次移動花費一分鐘

從x移動到2*x,每次移動花費一分鐘

假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要花多少時間才能抓住牛?

假設農夫起始位於點3,牛位於 5,n=3,k=5,最右邊是 6。如何搜尋到一條走到5的路徑?

策略:廣度優先搜尋

給節點分層。起點是第 0 層。從起點最少需 n 步就能到達的點屬於第 n 層。

第 1 層:2,4,6

第 2 層:1,5

第 3 層:0

依層次順序,從第一層開始擴充套件節點,每層的節點用佇列儲存。擴充套件時,不能擴充套件出已經走過的節點(需要判重) 。

這裡可以參考樹的層序遍歷。

#include

#include

#include

using namespace std;

int n, k;

const

int maxn =

100000

;int visited[maxn +10]

;//判重標記,visited[i] = true表示i已經擴充套件過

struct step };

queue q;

//佇列,即open表

intmain()

else

if(s.x +

1<= maxn &&

!visited[s.x +1]

)if(s.x *

2<= maxn &&

!visited[s.x *2]

) q.

pop();

}}return0;

}

抓住那頭牛

在乙個座標軸上,農夫在n點,牛在k點 假設在整個過程中牛靜止不動 現在農夫可以 1,1,2 的步數,問抓到牛的最小步數 採用stl的queue 第一次使用。include include include using namespace std int n,k const int maxn 10000...

抓住那頭牛

農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點 nn,牛位於點 kk。農夫有兩種移動方式 從 xx 移動到 x 1x 1 或 x 1x 1,每次移動花費一分鐘 從 xx 移動到 2 x2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要花多少時間才...

抓住那頭牛

題目描述 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點n 0 n 100000 牛位於點k 0 k 100000 農夫有兩種移動方式 1 從x移動到x 1或x 1,每次移動花費一分鐘 2 從x移動到2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最...