BFS小结
剛好yobobobo最近做BFS,我也被渲染了,當是復習一下,也總結一下吧,大部分是HDOJ上的BFS題目,由于本人時間有限,會持續更新
HDU 1548 http://acm.hdu.edu.cn/showproblem.php?pid=1548
基礎的BFS,每次有兩個方向,分別把步數乘以1和-1就行了。其余的都是基礎BFS,注意下起點終點重合的情況
HDU 1372http://acm.hdu.edu.cn/showproblem.php?pid=1372
經典的馬步移動,基本的BFS改成8個方向,同樣處理即可
HDU 2717 http://acm.hdu.edu.cn/showproblem.php?pid=2717
3種情況移動,+1,-1,*2,沒啥好說的,同樣處理就行了,同時注意下邊界,比目標大的話就只能全部-1,如果比目標大了就沒必要*2
HDU 3766 http://acm.hdu.edu.cn/showproblem.php?pid=3766
比較坑,開始以為和1372一樣,其實不是,這題沒有給出范圍,但是范圍很大,之前需要逼近下,然后再搜索,或者直接枚舉判斷下就行了
HDU 1026 http://acm.hdu.edu.cn/showproblem.php?pid=1026
其實做法一樣,需要打怪耗時,需要用優先隊列或者最小堆來處理下,不過這題比較糾結的是需要輸出路徑,首先注意細節問題,之前用的是next,保存后繼結點,果斷被坑,一個點在搜索的時候的后繼結點會有好多,果斷改成pre,前趨表示。
HDU 1072 http://acm.hdu.edu.cn/showproblem.php?pid=1072
題目總體思路很明確,遇到數字4的話,時間重置下,在判重的時候需要用三維數組,加一個當前時間,如果兩次到某點剩余時間相同,那就沒必要再走了。
HDU 1175 http://acm.hdu.edu.cn/showproblem.php?pid=1175
弱爆了,果斷也被坑了,開始覺得只要保存某個結點的方向和已拐的彎,然后搜索就行了,其實只要沿某條直線先一直搜到底就行了,不過還是要保存方向和已拐的彎的個數。
HDU 1180 http://acm.hdu.edu.cn/showproblem.php?pid=1180
注意下樓梯部分的細節問題就行了,可以停在原地等待樓梯轉向,這里比較坑啊,而且樓梯處不需要標記,可能兩個方向都要走
HDU 1242 http://acm.hdu.edu.cn/showproblem.php?pid=1242
果斷BFS+優先隊列
HDU 1728 http://acm.hdu.edu.cn/showproblem.php?pid=1728
類似于連連看,限制了拐彎次數,只需要每個方向走到底就行了,題目輸入有些坑,行列有點混亂應注意。而且如果之前搜過的點,之后不能停止而是跳過。
HDU 2579 http://acm.hdu.edu.cn/showproblem.php?pid=2579
由于 在K的倍數的時候石頭會消失,所以不能像其它迷宮問題一樣判重,可能當前時間石頭還在,而走一圈再回來石頭消失,也許就有其它的路徑可以走,因此判斷的時候要加上三維數組flag[x][y][time%k],如果到某點的時間取余都相同,那么此時的狀態就是完全相同,沒有意義的
?
HDU 2012 http://acm.hdu.edu.cn/showproblem.php?pid=2102
三維的BFS,注意一些細節就行了,譬如進入傳送門就必須傳送,而且另一邊必須只有是空地才行,坑死了,讀題不仔細
?
HDU 1253 http://acm.hdu.edu.cn/showproblem.php?pid=1253
三維BFS,木有問題,注意優化下
?
HDU 1240 http://acm.hdu.edu.cn/showproblem.php?pid=1240
三維BFS水之
HDU 1429 http://acm.hdu.edu.cn/showproblem.php?pid=1429
BFS+二進制壓縮存儲,很明顯要保存你拿過的鑰匙的狀態,總共10把鑰匙,使用二進制壓縮才1024個狀態,開始還打算把門的狀態也保存下來,結果莫名其秒的TLE,后來發現只需要鑰匙的狀態,因為鑰匙可以用很多次,但是又莫名其妙的MLE,好吧,不解釋,徹底暈了flag[x][y][key],表示在(x,y)手上鑰匙狀態為key
HDU 1254 http://acm.hdu.edu.cn/showproblem.php?pid=1254
經典的推箱子游戲,注意判重需要一個三維數組,可用兩次B FS解決,或者BFS+DFS
詳情請移步?? http://blog.csdn.net/acm_cxlove/article/details/7639306
HDU 2612 http://acm.hdu.edu.cn/showproblem.php?pid=2612
兩個人到同一點的和最短,分別以兩個人為起點,遍歷整個圖,計算出到每個KFC的最短距離,然后枚舉所有的KFC,算最小的代價
HDU 1983 http://acm.hdu.edu.cn/showproblem.php?pid=1983
最差的情況直接把出口或者入口四個方向封住,所以最多只要堵4次。BFS找出最短的路徑,并保存路徑,DFS處理路徑上的點,BFS判斷是否連通。
HDU 1195 http://acm.hdu.edu.cn/showproblem.php?pid=1195
題目不難,1W個可能,判重很簡單,就是轉化有點糾結,至少我寫得很矬
HDU 2128 http://acm.hdu.edu.cn/showproblem.php?pid=2128
坑爹的題目,不過題目很好,BFS和DFS都可以做
具體請見http://blog.csdn.net/acm_cxlove/article/details/7635497
出處:http://blog.csdn.net/acm_cxlove/article/details/7635603
總結
- 上一篇: hdu 1584蜘蛛牌(DFS)
- 下一篇: 微信公众帐号开发教程第14篇-自定义菜单