小結:bfs

來源:互聯網
上載者:User

標籤:blog   http   io   os   ar   strong   on   c   log   

概要:我們在初始狀態要到達終止狀態可以沿著同深度的向下搜尋,這樣範圍覆蓋更廣,在解的深度較小的時候十分適用。

技巧及注意:

bfs很多技巧啊,我來一一列舉吧:

注意:存bfs狀態時一定要盡量小化狀態,只存有效資訊來進行bfs,而不要存整個圖進去(QAQ,noip就是這樣掛的。當時太弱。。)

hash判重:在一些bfs題中所有元素的範圍(也可以自己映射唄)很小的情況下,我們假設有k個元吧,我們可以考慮用以基於k進位為底數的冪來進行hash,比如【wikioi】1004 四子連棋,【BZOJ】1054: [HAOI2008]移動玩具(bfs+hash),

數組判重:在一些情況下,比如純bfs或方向限制啊什麼的,可以開多維陣列來記錄訪問狀態。如:【wikioi】1026 逃跑的拉爾夫(方向判重),【BZOJ】1616: [Usaco2008 Mar]Cow Travelling遊盪的奶牛(dp/-bfs)(方案判重),【BZOJ】1644: [Usaco2007 Oct]Obstacle Course 障礙訓練課(bfs)(方向判重),

有障礙的距離:當出現這些起點到終點最多能越過k個障礙的圖給你bfs時,可以逆著想,我們想這個點到終點需要越過的最少障礙數,然後用k來判斷是否合法即可,比如:

多種約束:當約束條件增多時,我們可以考慮在bfs轉移狀態時維護多種資訊,然後根據題意來決策,比如:【BZOJ】1632: [Usaco2007 Feb]Lilypad Pond(bfs)

繞圈約束:當bfs中要求我們繞一個指定形狀(有且一個連通的)求最短距離,我們可以從這個形狀邊界的點射一條射線出去,然後在bfs後維護兩種方向的bfs,即一種是不經過射線的,一種是從不經過射線的轉移到需要經過射線的。也就是饒了一個圈過來後要繞回去時,我們就要維護後者,比如:【BZOJ】1656:[Usaco2006 Jan]The Grove 樹木(bfs+特殊的技巧)

雙向廣搜:當遇到一種從初始狀態到目標狀態都給你讓你求最小移動步數時,我們可以同時從初始狀態和目標狀態都做bfs,然後判斷是否相交即可。很久以前寫過一題的,不知道哪題了。。

小結:bfs

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.