廣度優先搜尋 抓住那頭牛(poj 3278)

2021-08-11 07:48:58 字數 2248 閱讀 2950

描述

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

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

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

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

輸入兩個整數,n和k

輸出乙個整數,農夫抓到牛所要花費的最小分鐘數

樣例輸入

5 17

樣例輸出

4

廣度優先搜尋演算法如下:(用

queue)

(1)

把初始節點

s0放入

open

表中;

(2)

如果open

表為空,則問題無解,失敗退出;

(3)

把open

表的第乙個節點取出放入

closed

表,並記該節點為n;

(4)

考察節點

n是否為目標節點。若是,則得到問題的解,成功退出;

(5)

若節點n

不可擴充套件,則轉第

(2)步;

(6)

擴充套件節點

n,將其不在

closed

表和open

表中的子節點

(判重)

放入open

表的尾部,

並為每乙個子節點設定指向父節點的指標

(或記錄節點的層次)

,然後轉第

(2)步。 

先看乙個廣搜遍歷:

#include #include #define num 100

using namespace std;

//廣度優先搜尋演算法如下:(用queue)

//(1) 把初始節點s0放入open表中;

//(2) 如果open表為空,則問題無解,失敗 退出;

//(3) 把open表的第乙個節點取出放入 closed表,並記該節點為n;

//(4) 考察節點n是否為目標節點。若是, 則得到問題的解,成功退出;

//(5) 若節點n不可擴充套件,則轉第(2)步;

//(6) 擴充套件節點n,將其不在closed表和 open表中的子節點(判重)放入open表的尾部 ,

//並為每乙個子節點設定指向父節點的指標( 或記錄節點的層次),然後轉第(2)步。

int graph[num][num];

int n,m;//頂點數和邊數;

bool visit[num] = ;//標記已經訪問過的頂點;

void bfs(int k)}}

}int main()

//針對非連通圖

for(int i = 1;i<=n;i++)

if(!visit[i])

bfs(i);

cout <

//這道題注意:

//1.

這種圖是無法用資料結構來儲存的,這是一種未知的圖;不過他的頂點個數可以得到;並且是每兩個頂點之間的位置直接就可以知道的, //

這是由關係來卻定的,所以在入佇列的時候直接就是將其找到其鄰接頂點,直接就入隊了,這種能直接找到鄰接頂點的直接就是開始廣搜 //

,不需要儲蓄,因為儲存的目的也就是為了將每一鄰接的頂點找到,如果能直接省略的儲存就直接省略了,

//2,在使用廣搜的時候可能要求解其中的步數,這個時候可以將入佇列的型別是乙個結構體,這樣在入佇列的時候直接就可以將其

+1,就可以將 //

步數計算的到;

這道題的**:

#include #include #define num 100000

using namespace std;

int n,k;

bool visted[num+10];

struct step;//預設建構函式;

};void bfs()//過程和層序遍歷二叉數一樣的;不一樣就是二叉樹只有兩個鄰接頂點,這是確定的;

if( s.i + 1 <= num && !visted[s.i+1] )

if(s.i*2<=num&&!visted[s.i*2])}}

}int main()

ps:我的很多題是用stl來解題的,如果不只到c++stl可以先去了解怎麼用,相信你會喜歡他,因為很多題目一位有了他變得更簡單;

廣度優先搜尋 入門 抓住那頭牛

農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上 農夫起始位於點n 0 n 100000 牛位於點k 0 k 100000 農夫有兩種移動方式 1 從x移動到x 1或x 1,每次移動花費一分鐘 2 從x移動到2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要 花多...

演算法基礎 抓住那頭牛 廣度優先搜尋演算法

題目 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點n 0 n 100000 牛位於點k 0 k 100000 農夫有兩種移動方式 1 從x移動到x 1或x 1,每次移動花費一分鐘 2 從x移動到2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要...

poj 3278 bfs(抓住那頭牛)

題意 農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點n 0 n 100000 牛位於點k 0 k 100000 農夫有兩種移動方式 1 從x移動到x 1或x 1,每次移動花費一分鐘 2 從x移動到2 x,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要...