1. 程式人生 > >50道hdu基礎的搜尋題目

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