描述
農夫知道一頭牛的位置,想要抓住它。農夫和牛都位於數軸上,農夫起始位於點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,每次移動花費一分鐘 假設牛沒有意識到農夫的行動,站在原地不動。農夫最少要...