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判定是否可行)