捕牛記 廣搜

2021-08-15 07:26:03 字數 1133 閱讀 6107

description

農民john剛剛獲悉一頭逃跑的牛的位置,打算立刻就去把它抓回來。john和牛都站在一條直線上,開始時john位於座標點n上( 0 ≤ n ≤ 100,000 ),牛位於座標點k上( 0 ≤ k ≤ 100,000 )。john有兩種行動方式:步行和瞬移(這種技能不是一般群眾具備的)。

步行:john花一分鐘由任意點x移動到點x-1或點x+1。

瞬移:john花一分鐘由任意點x移動到點2*x。

假設牛不知道john來抓它,一直站在原地吃草。問john最少需要花多少分鐘才能抓到它?

input

有多個測試用例,每個用例一行,有兩個整數:n和k,用空格分隔。最後一行是兩個 -1,不用處理。

output

為每個用例輸出乙個整數(單獨佔一行):john抓住逃跑的牛最少需要的時間,以分鐘算。

sample input

5 17

-1 -1

sample output

4

source

usaco 2007 open silver

#include //如果不用c++輸入則呼叫#include與#includeusing namespace std;

#define  max 100006

int main()

{    int n,k;

int a,b,que[max],time[max],head,tail;

/*time陣列(用於存放到達結點(即座標)的時間),乙個佇列(queue)及隊頭(head)隊尾(tail)*/

int visited[max];

while(cin>>n>>k)

{if(n<0||k<0) break;

time[k]=-1;///假設到達牛所在座標的時間為-1(即結點k的值為-1)

memset(visited,0,sizeof(visited));///將所有座標點的入隊狀態用0標記,表示未入隊

visited[n]=1,time[n]=0;

que[0]=n,head=0,tail=1;//將n插入佇列,此時隊頭的值為0,隊尾的值為1

while(head=0&&a+1=0&&a-1=0&&2*a

抓住那頭牛(廣搜)

描述 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點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 抓牛(廣搜)

題意 john和它的牛在一天直線上,joh每次可以向前走一步或者向後走一步或者跳到當前位置的2倍位置上,求john在最少的時間裡抓到那牛。輸入 john當前位置和牛所在的位置。輸出 john花的最少時間。分析 可以將問題轉化為從乙個點到另乙個點的最少步數,這裡可以用廣搜去做,首先將當前john的位置...