poj 3278 bfs(抓住那頭牛)

2021-07-03 23:45:33 字數 929 閱讀 9328

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

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

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

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

思路:簡單bfs即可。可以自己手動寫佇列,也可以用stl,注意結構體的初始化操作寫法。

手動佇列:

#include #include #define n 100005

int q[n],flag[n];

int n,m,now;

int rear,front;

int test(int x)

void enter(int x)

int main()

if(test(now+1))

enter(now+1);

if(test(now-1))

enter(now-1);

if(test(now*2))

enter(now*2);

} }return 0;

}

stl的queue:

#include #include #include #include #include #include #include #define inf 0x3fffffff

using namespace std;

#define n 100000

int used[n+5];

struct node;

};queueq;

int n,m;

int main()

if(p.id>0 && !used[p.id-1])

if(p.id

廣度優先搜尋 抓住那頭牛(poj 3278)

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

抓住那頭牛bfs練習

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

poj 3278(bfs寬度優先搜尋)

題目大意 給定乙個數n o n 100000 變成另乙個數k o k 100000 允許的操作是乘以2,或者加減1,問最少要幾步才能完成?題目分析 一般這種求有多少種方案的感覺用bfs 的居多。反正這題是用bfs的,然後廣度優先搜尋都是要用到佇列的,然後感覺這題就比較裸吧,只是一維的,相對於之前做的...