POJ 3278寫題報告BFS,DFS

2021-10-07 22:20:44 字數 805 閱讀 9072

需要通過數字n,獲得數字k。

可以對n進行兩種操作,時間都是一分鐘,求最短用時。

n–或者n++;

n*=2;

採用bfs:即每一步可以向左右走一步,或者去n*2;當n>k時,只執行n–;時間複雜度為o(n)

採用dfs:對於n>k,只執行n–;當n k可以通過一直加1的方式得到k,或者先使n = k/2,再通過n2一步使得n== k;

當k是奇數,n -> k可以通過一直加1的方式得到k,或者先使n== k/2,再通過n2然後n++兩步使得n== k,或者先使n== k/2+1,再通過n*2然後n–兩步使得n==k。

時間複雜度為o(logn);

下面只給出dfs的解法

#include

#include

#include

using

namespace std;

long

dfs(

long n,

long k,

long step)

//k是偶數

else

}int

main()

return0;

}

題目讀錯,沒有讀到可以進行n++的操作,唯讀到n–,導致剛開始思路出現問題。

遞迴求解邏輯沒有理清楚,並且對於k是奇數的情況,少考慮一種情形。

採用bfs做法

牛客比賽

class

solution

return0;

}};

開兩個佇列就會記憶體超限。

poj3278 結題報告

這個題是乙個容易理解題意的簡單bfs題目.作為菜鳥的我竟然能自己想到解決方案.不容易.個人思路如下,農夫在每個點都有三種走法,我們先把初始位置標記為走過,三種方法位置沒走過就入隊,開始三個點都能入隊,再對三個點每次出隊乙個,分析這個點的三個位置能否走,能走得入隊,依此類推.這裡我用的訪問陣列是乘以個...

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...