回朔法是计算机程序设计中通用的算法
随着计算机性能越来 越好,穷举已经成为了解决问题的一个有效地途径。
在穷举途径中采用回朔的方法,关键是要设计好剪枝方法。
通用的回朔法的程序模板如下(《挑战编程》)
采用这个算法框架来编写经典的
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
请按任意键继续. . .