一道bfs廣搜的ACM競賽入門題

2021-09-26 00:07:22 字數 1185 閱讀 5190

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

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

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

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

input

一行: 以空格分隔的兩個字母:

n 和k

output

一行: 農夫抓住牛需要的最少時間,單位分鐘。

標準的bfs廣搜題,對這題的解法,大致的基本思路:

1、建立結構體吧兩種不同的引數放在一起,牛的位置now,和時間time。

2、在需要建立乙個陣列來記錄農夫走過的位置,就是vst

3、在主函式中,吧結構體放在佇列裡,在用結構體建立next和now(農夫的現在和接下來的位置)

4、接下來的步驟個人理解在農夫每一次行動的最終結果與牛所在的位置做對比,如果 if(now.x==m)結構體中x的值與m相等,就說明農夫找到了牛,而且根據bfs廣搜的特性必定是最短路徑……

這道題主要的思路就在此了,

想要真的搞會這道題,結構體和佇列也是一定要會用並且融匯貫通的,目前我還做不到,僅僅是達到能夠理解bfs的使用方法……

**如下

#include"iostream"

#include"algorithm"

#include"cstring"

#include"queue"

using namespace std;

int n,m;

struct state

;int vst[100005];

bool cheak(state a)

return 1;

}void bfs(state a)

{a.stp=0;

queue q;

state now,next;

vst[a.x]=1;

q.push(a);

while(!q.empty())

{now=q.front();

q.pop();

// cout<<"x= "<> n>> m)

{if(n >= m)

{cout《這**比我剛才口胡的那麼多可有用的多

bfs的**模板社群能搜到好多……

一道簡單的acm題目

acm協會主席alphard決定在除夕夜辦一場山寨春晚,立即得到廣大acmer的支援。報名的acmer眾多,主席已經開始忙不過來了。幸好有 細心 的angelclover幫忙,把報名參加山寨春晚的節目單按照預演時間進行了歸類。alphard要求春晚不要超過4小時,但為了不打擊廣大acmer的積極性,...

BFS 走出迷宮 我的第一道BFS

用s表示出發點,用.表示可以走的點,用g表示最後的終點,用 表示牆,不能通過。計算出能不走出迷宮,如果能走出迷宮,就計算出最短路徑。用乙個dis二維陣列在dis x y 處專門儲存起點到 x,y 的距離。先將起點push進佇列,然後將此處的dis設定為0,然後進入迴圈。得到佇列的第乙個元素front...

計蒜客 迷宮(一)bfs(基礎的廣搜)

迷宮 一 樣例輸入1 34s t樣例輸出1 no樣例輸入2 34s t樣例輸出2 yes解題思路這是一道典型又基礎的廣搜題,廣搜一般就是用於狀態表示比較簡單 求最優策略的問題。就是進行一層一層的搜尋,每一條路的搜尋進度都是一樣的,因此呢,要用到佇列的知識!首先,第一步就是判斷下一步是否能夠通過,即判...