50道hdu基礎搜索總結


Dfs:

大部分是直接遞歸枚舉,即求滿足約束條件下的解,雖不用剪枝,但也需要代碼能力。

練習遞歸枚舉的題目:

1241       Oil Deposits (dfs的連通塊個數)

1016       Prime Ring Problem

1584       蜘蛛牌(簡單dfs,簡單的剪枝,還有人用DP做(???))

1426       Sudoku Killer(練習遞歸的好題目 or Dancing links(???))

2510       符號三角形(打表題,寫寫打表程序還是不錯的)

2553       N皇后問題(在n較小時,是經典的練習遞歸枚舉的題目,n較大時狀壓(???))

2677       Dota all stars( 單純練習遞歸的題目+串的處理 )

3350       #define is unsafe (練習遞歸的好題目)(用結構體做返回值同時返回多個參數)

3290       The magic apple tree(練習遞歸的題目,但有些坑)

2821       Pusher( 看上去有點嚇人,實際是簡單題,搜就好了 )

2782       The Worm Turns(實際是簡單題,搜就好了)

2616       Kill the monster(bfs+位運算 或 dfs 或 STL枚舉全排列,總之,就是暴力……)

3500       Fling(實際是簡單題,搜就好了)

2514       Another Eight Puzzle

1547       Bubble Shooter(思路是搜兩次,dfs或bfs)

1175       連連看(dfs 或 bfs)

1728       逃離迷宮(和連連看一樣)

 

剪枝:

典型題目:

1010       Tempter of the Bone(標准迷宮dfs,學習剪枝的開始)

學習了: 極限情況下的剪枝

    奇偶性剪枝

    (從(a,b)走到(c,d) 若a+b 與 c+d 奇偶性相同,需要走偶數步;否則走奇數步)

1455       Sticks(剪枝的好題目,黑書例題,坑了我好久的說)

學習了:  排序后解答樹同層避免重復搜索

             調整法(全集不行與子集肯定不行)

             想法:每根小棍子都要被配對,當前情況下第一根無法配對,直接return

避免重復的題目還有:

1258       Sum It Up

2610       Sequence one( 讓我認識了 stable_sort()  )

2611       Sequence two( 在”2610 Sequence one”的基礎上稍加修改即可)

 

Bfs:

 

一些簡單題目:

1180       詭異的樓梯 (bfs可以加自己)

2102       A計划

1240       Asteroids! (單純的三維bfs )

1253       勝利大逃亡 (單純的三維bfs,加個剪枝: a+b+c-3>limit快了一倍)

1548       A strange lift  

2717       Catch That Cow

1372       Knight Moves(或【雙廣】也可以)

1312       Red and Black

2612       Find a way

2531       Catch him    

1252       Hike on a Graph

 

找狀態hash判重很重要

幫助我理解“狀態”的題目:

1732       Push Box(8維數組hash狀態)

1429       勝利大逃亡(續)

理解:

  一開始不知道怎么搜

  和隊友探討,讓我認識到 寬搜是很盲目,很隨意的事情

  搜就好了,碰到目標節點再說

“狀態”練習題目:

1254       推箱子         ( bfs套bfs,走過的點還可以再走 )

1495       非常可樂(白書的例題—“倒水問題”)

2364       Escape

2579       Dating with girls(2)

1104       Remainder(自己在做的過程中逐漸找到了”狀態”,和數論沾點邊)

 

在bfs中經常碰到這樣一類問題,加入節點的順序與隊列中節點的單調性不一致,這個時候用到優先隊列來代替普通隊列。我自己是用一個delay(延遲標記),讓這類節點先只向自己拓展,之后再向其他節點拓展。

“延遲”相關題目:

1240       Rescue (可以加自己,延遲入門)

4198       Quick out of the Harbour

1206       Ignatius and the Princess I(性價比高的寬搜題目)

2416       Treasure of theChimpIsland

2653       Waiting ten thousand years for Love

( 從這里引入了Dijkstra 最短路算法??????? )

 

還有就是【雙向廣搜】

碰到了幾道可以用雙廣解決的題目,用普通bfs也可以:

1401       Solitaire       (【雙廣】,用普通bfs也能過)(好題)

1195       Open the Lock(普通bfs,狀態,或【雙廣】)

 

一個問題:

判重用數組有時是嚴重浪費的,狀態並沒有那么多,但為了能完全表示,浪費了很多空間,甚至開不下數組,這個時候用hash技術……(還不太會%>_<%)

 

Dfs&Bfs:

1044       Collect More Jewels(好題)

這個題目提供了一種思路:

       bfs預處理構造隱式圖,然后dfs枚舉所有情況求出最優解

1072       Nightmare(和上題同樣的思路)

1983       Kaitou Kid - The Phantom Thief (2) (好題)(dfs枚舉可能情況,然后bfs判定是否可行)

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM