題意:農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點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的,然後廣度優先搜尋都是要用到佇列的,然後感覺這題就比較裸吧,只是一維的,相對於之前做的...