50道hdu基礎的搜尋題目
Dfs:
大部分是直接遞迴列舉,即求滿足約束條件下的解,雖不用剪枝,但也需要程式碼能力。
練習遞迴列舉的題目:
1241 Oil Deposits (dfs的連通塊個數)
1016 Prime Ring Problem
1584 蜘蛛牌(簡單dfs)
1426 Sudoku Killer(數獨)
2510 符號三角形(打表題,寫寫打表程式還是不錯的)可以先自己執行一下,執行得到結果之後交上打表程式碼,否則會超時
2553 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判定是否可行)