題意: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...