專題1:遞迴運用初步
對遞迴的介紹,請看這裡。
遞迴的應用總是和深度優先搜尋聯絡到一起。這裡先請看兩篇有關的文章,一篇中文的,一篇英文的。
看了這兩篇文章,應當對深度優先的基本概念有些瞭解。請結合範例程式仔細體會8皇后問題的解法。這是很經典的深度優先搜尋問題。
以下是一些問題的範例程式:
整數拆分
組合問題
全排列
八皇后問題
理解這些程式若有困難,我們會詳細講解它們。理解後,請自己再編一遍。
下面是一些有關它們的練習。
關於這方面的題目很多,我們會不斷添加。
Group Z1:遞迴和深度優先搜尋初步
Group 11: 搜尋初步
深度優先搜尋和廣度優先搜尋是屬於常用的搜尋技術。前者用到遞迴,後者涉及隊列。
深度優先搜尋對於解決某些問題並不一定是最好的,但很容易實現,有時也十分有效,它的痛點在於如何剪枝最佳化。出現在遞迴初步中的題目可以算是深搜的一種。
廣度優先搜尋技術的結構相對固定,但節點的判重也是個痛點。由於時間效率的原因,廣度優先搜尋運用得更為廣泛。
下面是關於它們的一些練習。
編號 來源 題號 標題
11.0 ZJU 2416 Open the Lock
廣度優先。(範例程式)
11.1 ZJU 1091 Knight Moves 最簡單的廣度優先搜尋問題,但包括了這類方法的所有要素。
11.2 ZJU 1005 Jugs 典型的廣度優先
11.3 ZJU 1649 Rescue 廣度優先在迷宮問題中的應用
11.4 ZJU 1002 Fire Net 這些都是可以運用深度優先的題目。有些需要很好的剪枝。
11.5 ZJU 1003 Crashing Balloon
11.6 ZJU 1004 Anagrams by Stack
Group 13: 廣度優先搜尋
下面是關於廣度優先搜尋(BFS)的一些練習。
編號 來源 題號 標題
13.0 ZJU 1438 Asteroids! 三維迷宮,想想如何控制方向
13.1 ZJU 2050 Flip Game 可以嘗試一下位元運算
13.2 ZJU 2081 Mission Impossible 可以用BFS+DFS
13.3 ZJU 1310 Robot 進階,稍難一點
13.4 ZJU 1671 Walking Ant
13.5 ZJU 1940
Dungeon Master
13.6 ZJU 1103 Hike on a Graph
13.7 ZJU 1358 Moving Object Recognition
13.8 ZJU 1217 Eight 難題,注意狀態的表示與雜湊
13.9 ZJU 1227 Free Candies
13.10 ZJU 1505 Solitaire
13.11 ZJU 1361 Holedox Moving
Group 12: 深度優先搜尋
下面是關於深度優先搜尋(DFS)的一些練習。
編號 來源 題號 標題
12.0 PKU 1256 Anagram
產生不重複排列
12.1 ZJU 1711 Sum It Up 產生不重複的群組合
12.2 ZJU 2412 Farm Irrigation 初步,有的需要剪枝
12.3 ZJU 1694 Shredding Company
12.4 ZJU 1457 Prime Ring Problem
12.5 ZJU 1204 Additive equations
12.6 ZJU 2192 T-shirt Gumbo 進階,有序搜尋與剪枝
12.7 ZJU 1909 Square
12.8 ZJU 1987 Vase Collection
12.9 ZJU 1937 Addition Chains
12.10 ZJU 1984 Genetic Code
12.11 ZJU 2110 Tempter of the Bone
12.12 ZJU 1179 Finding Rectangles 難題,需要很好搜尋策略和剪枝技巧
12.13 ZJU 1411 Anniversary
12.14 ZJU 1008 Gnome Tetravex
12.15 ZJU 1499 Increasing Sequences
Group 14: 圖--遍曆(Graph Traversal)、傳遞閉包(Transitive Closure)
編號 來源 題號 標題
14.0 ZJU 1221 Risk 用BFS也可以解決最短路徑問題
14.1 ZJU 2165 Red and Black 基於網格的連通性分析
14.2 ZJU 1589 Professor John 傳遞閉包,也可以用DFS
14.3 ZJU 1085 Alien Security
Group 15: 圖--拓撲排序(Topological Sort)、關節點(Articulation Point)
編號 來源 題號 標題
15.0 ZJU 1060 Sorting It All Out
15.1 ZJU 1119 SPF
15.2 ZJU 1311 Network
Group 16: 圖--最小產生樹(Minimum Spanning Tree)
編號 來源 題號 標題
16.0 ZJU 1406 Jungle Roads
16.1 ZJU 1203 Swordfish
16.2 ZJU 1542 Network
16.3 ZJU 1586 QS Network 要注意節點權值
16.4 ZJU 1372 Networking 要注意重複邊
16.5 ZJU 1914 Arctic Network 想想為什麼可以用最小產生樹?
16.6 ZJU 2158 Truck History 想想如何轉化為最小產生樹?
16.7 ZJU 2048 High Ways 基於連通分量的最小產生樹
16.8 ZJU 1718 Building a Space Station
16.9 PKU 1258 Agri-Net
Group 17: 圖--最短路徑(Shortest Path)
編號 來源 題號 標題
17.0 ZJU 1053 FDNY to the Rescue!
17.1 ZJU 1609 Equivalence
17.2 ZJU 1082 Stockbroker Grapevine
17.3 ZJU 1655 Transport Goods 邊權值有些特別
17.4 ZJU 1092 Arbitrage
17.5 ZJU 1967 Fiber Network 想想如何利用Floyd三重迴圈?
17.6 ZJU 1456 Minimum Transport Cost 有些難度的最短路徑題
17.7 ZJU 2008 Invitation Cards 帶最小堆的Dijkstra
17.8 ZJU 1765 Which Way Do I Go? 綜合題,比較複雜
17.9 ZJU 1232 Adventure of Super Mario
Group 18: 圖--迴路問題(Euler Path & Hamilton Tour)
編號 來源 題號 標題
18.0 ZJU 1105 FatMouse's Tour
18.1 ZJU 2016 Play on Words 可轉化為判定歐拉路的存在性
18.2 ZJU 1130 Ouroboros Snake 可以轉化為歐拉路
18.3 SCU 1286 First Love 可以轉化為歐拉路
Group 19: 圖--二部圖匹配(Bipartite Matching)
編號 來源 題號 標題
19.0 ZJU 1140 Courses
19.1 ZJU 1137 Girls and Boys
19.2 ZJU 1157 A Plug for UNIX
19.3 ZJU 1364 Machine Schedule
19.4 ZJU 1197 Sorting Slides
19.5 ZJU 1525 Air Raid
19.6 ZJU 1059 What's In a Name
19.7 ZJU 1516 Uncle Tom's Inherited Land
19.8 ZJU 1654 Place the Robots
19.9 ZJU 1509 Family
Group 20: 圖--網路流(Network Flow)
編號 來源 題號 標題
20.0 PKU 1273 Drainage Ditches 典型的網路最大流
20.1 ZJU 1734 Power Network 可轉化為網路最大流
Group 21: 圖--差分約束(Difference Constraints)
編號 來源 題號 標題
21.0 ZJU 1260 King
21.1 ZJU 1420 Cashier Employment
21.2 ZJU 1455 Schedule Problem
21.3 ZJU 1508 Intervals
Group 22: 圖--其它
編號 來源 題號 標題
22.0 ZJU 1015 Fishing Net 弦圖判定
22.1 ZJU 1492 Maximum Clique
求最大團,經典NP hard
22.2 ZJU 1576 Marriage is Stable 穩定婚姻,延遲認可演算法