简单的递归回溯法,锻炼基本的编程能力。
这类题是对代码能力的要求比对思想的要求高点。
而且要审题,题目要求安lexicographically 顺序输出,不小心递归的顺序就会输出错误了。
棋盘是由数字列或者行,和字母列或者行组成的,故此输出结果要注意。
#include
#include
const int MAX_N = 27;
bool board[MAX_N][MAX_N...
分类:
其他好文 时间:
2014-08-03 18:05:45
阅读次数:
301
分支限界法一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即...
分类:
其他好文 时间:
2014-07-31 20:43:21
阅读次数:
172
题意:给你n根棍子跟它的边长,要你能用这些棍子组一个正方形
思路:回溯法
能组正方形条件:
1、棍子总长%4要等于0
2、不能出现棍子的长度大于正方形的边长
3、棍子数大于等于4
直接用回溯肯定会超时,所以我们需要来优化空间了
1、对于已使用的边,不能在它的子树中使用
2、由于题目是判断能不能组正方形,所以只要满足了条件,就直接结束!
所以AC代码:
#include
#in...
分类:
其他好文 时间:
2014-07-26 02:57:46
阅读次数:
226
题目要求:输入背包的容量v和物品的数量n;接下来n 行每行输入两个数字,第一个是物品质量,第二个是物品价值;输出背包容纳物品的最大价值。下面直接贴代码:回溯法 1 #include//之前必须知道背包容量和n个物品 2 #include 3 using namespace std; 4 class....
分类:
其他好文 时间:
2014-07-26 01:00:46
阅读次数:
200
今天非常高兴可以听高老师的讲座,因为我跟高老师有渊源(当然是我认识他,他不认识我)。我毕业后的第一份工作中有一小段时间在做Android手机应用的开发,那时Android正盛, 网上资料铺天盖地,但良莠不齐,想我在初出茅庐软件思想还不健全的情况下要找到一份通俗易懂并且靠谱的参考资料实在很困难。但非常...
分类:
其他好文 时间:
2014-07-23 22:13:37
阅读次数:
214
没有对输入的待解数独进行一般性验证(同一行、一列以及同一个小九宫格都不能出现重复数字) 算法利用回溯的思想: 从第一个空白处开始,找到其候选解(排除同行、同列以及同一小九宫格的所有出现过的数字,剩下未...
分类:
编程语言 时间:
2014-07-21 10:30:29
阅读次数:
304
本章习题很经典:
3-4判断单位矩阵
5、矩阵乘法
8、八皇后问题
其中八皇后问题我感觉存在问题,回溯法我运用的不好就先不挂了。
题目请见 http://download.csdn.net/download/wangpegasus/5701765
3、
bool identity_matrix(int matrix[10][10])
{
int length = 10;...
分类:
其他好文 时间:
2014-07-19 13:41:20
阅读次数:
182
深度优先搜索(DFS)是搜索算法的一种。最早接触DFS应该是在二叉树的遍历里面,二叉树的先序、中序和后序遍历实际上都属于深度优先遍历,实质就是深度优先搜索,后来在图的深度优先遍历中则看到了更纯正的深度优先搜索算法。
通常,我们将回溯法和DFS等同看待,可以用一个等式表示它们的关系:回溯法=DFS+剪枝。所以回溯法是DFS的延伸,其目的在于通过剪枝使得在深度优先搜索过程中如果满足了回...
分类:
其他好文 时间:
2014-07-08 20:34:20
阅读次数:
271
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需解的活结点...
分类:
其他好文 时间:
2014-07-08 16:53:41
阅读次数:
256
(一)增量构造法
#include
#include
using namespace std;
const int MAXN = 1000;
int A[MAXN], n;
void print_subset(int n, int *A, int cur) {
for(int i = 0; i < cur; ++i) cout << A[i] << " ";
cout << endl...
分类:
其他好文 时间:
2014-07-04 08:06:43
阅读次数:
224