POJ 3278 抓牛(廣搜)

2021-09-01 08:32:14 字數 794 閱讀 3790

題意:john和它的牛在一天直線上,joh每次可以向前走一步或者向後走一步或者跳到當前位置的2倍位置上,求john在最少的時間裡抓到那牛。

輸入:john當前位置和牛所在的位置。

輸出:john花的最少時間。

分析:可以將問題轉化為從乙個點到另乙個點的最少步數,這裡可以用廣搜去做,首先將當前john的位置入隊,然後根據john的三種走法依次遍歷並且入隊,在出佇列的時候判斷此點是否走過,並且此點的值是否等於牛所在的點的值。如果等於輸出到達當前位置所需要的步數。

如果john的位置在牛的位置之前直接輸出n-k;

這裡可以定義乙個step[ ]陣列來記錄到達每個點時走了多少步。

#include#include#include#includeusing namespace std;

const int maxn=100010;

bool vis[maxn]; //標記陣列

int step[maxn]; //記錄到達每個點所需要的步數

queueq; //佇列q;

int bfs(int n,int k)

else if(i==2)

next=head-1;

else next=head*2;

if(next<0||next>=maxn) continue;

if(!vis[next])

if(next==k)

return step[next];}}

}int main()

return 0;

}

POJ 3278 簡單廣搜

poj3278 題意 輸入n,m,求由n到m需要最少步數,n只能加一減一或者乘二。寫的第二道廣搜題,發現用佇列就是每一種可能讀入隊尾,然後再從隊首乙個乙個的遍歷。需要做的是判斷條件和記錄步數。includeusing namespace std include include include def...

POJ 3278 解題報告

這道題是個bfs的問題,因為要求的是乙個相鄰節點間距離都為1的graph中兩個節點間的最短距離。一開始上來用的dfs,結果可想而知。3278 accepted 844k 63ms g 1192b id thestor1 lang c task poj3278 include include incl...

POJ 3278 題解 搜尋

牛 奶牛在k處不動 fj在n處去抓,最快要多長時間 某時刻fj的座標為x,fj有3種走法,每次每種走法1分鐘 往前走一步 往後走一步 傳送到2x處 time 1000 ms memory 65536 kb 搜尋 include include include include using namesp...