回朔法是計算機程序設計中通用的算法
隨着計算機性能越來 越好,窮舉已經成爲了解決問題的一個有效地途徑。
在窮舉途徑中採用回朔的方法,關鍵是要設計好剪枝方法。
通用的回朔法的程序模板如下(《挑戰編程》)
採用這個算法框架來編寫經典的
n皇后問題,輸出皇后的排列方式和總的排列數目
一個簡單的枚舉排列的程序,會說的方法
比較早的時候寫的n皇后題目
實際上,這樣輸出是有問題的。時間的大部分都浪費在了io上了。可以嘗試一個12,然後去掉和不去掉print的句子。
棋盤移動問題,5*5的棋盤上有24個棋子,有一個空位,棋子都不相同,現在隨意的移動空位,只知道棋盤的初始狀態和終止狀態,以及每一種移動方法的次數,例如上5次等,求是否存在這樣一個序列,如果存在,輸出該序列,否則輸出0
該題目的剪枝條件爲
1,橫向移動步數之和與初始座標之和爲目標座標,同理縱向移動步數
2,每個方向的移動步數小於等於該方向最大的步數
3,每次移動不能超過邊界
算法爲典型的回朔法
輸入如下
20 18 7 19 10
24 4 15 11 9
13 0 22 12 14
23 16 1 2 5
21 17 8 3 6
20 18 7 19 10
24 15 11 12 9
13 4 22 2 14
23 16 0 1 5
21 17 8 3 6
1 2 1 2
得到的輸出如下
U R R D D L
請按任意鍵繼續. . .