回溯法——符号三角形,n后问题

 初步分析,符号三角形问题应该是一个子集树问题,第一行有n个符号,那么第i层有n-i个符号,直到n-i=0结束。总符号数=(1+n)n/2,并且+和-符号相同,则+和-分别有(1+n)n/4个,那么这个n*(n+1)还需要可被4整除作为三角形存在的判断条件,因此我们可以给题目加上判断条件,任一符号都不能超过(1+n)n/4个,否则剪枝。

此外我们还要满足两个符号如果同号,那么下面是+,如果异号下面是-,这么一看从第一层开始分配符号要比从最后一层开始分配简单。因此我们决定在层数上由上到下进行回溯,只需决定第一行就可以知道下面所有的符号。直到搜索至叶结点输出结果(符号三角形数量++)

 


 

用x[n][m]代表棋盘第n行m列,若x[i][j]有皇后,那么第i行不能有其他皇后,第j列也不能有,同时x[i+t][j+t] 也不能有(t>=1),若第二个皇后放在x[k][L],那么就有k!=i,L!=j,且k-L!=i-j,k+L!=i+j使得两棋子不在同一斜线。这就是该题的几个约束条件。

 


 这两个问题较为简单,但体现出了用回溯法解题的一般思路流程:

1.回溯法的题目总是呈现出一种规模从大到小的层次性,这也是回溯法的递归(迭代)原理所在,虽然可以选择递归或迭代两种方法,不过显然递归看起来更加简单。

2.确定题目的类型,究竟是子集树还是排序树,根据解空间的树类型来套入对应的模板(方法)

3.回溯法中可以利用题目的限制条件,使得遍历过程中可以剪枝,能减小题目的时间复杂度。因此要积极寻找题目中的限制条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值