- 论坛徽章:
- 0
|
20可用积分
本帖最后由 pp1984829 于 2013-06-02 21:08 编辑
如图二维数组
@a = {
(a,b,c,d,e)
(f,g,h,i,j,k)
(l,m,n,o,p)
(q,r,s,t,u)
(v,w,x,y,z)
}
题目是从二维数组的每一行的数组中选出一个元素,列举出所有的组合方式.
例如可行组合(a,f,l,q,v),(b,h,o,s,z)等。
现在我用递归回溯的算法解出了答案,遇到很比较大的数组时效率很低,想求一迭代回溯的实现方法提高效率。@a二维数组是我列举的例子,实际场景中二维数组的元素个数未知为n.
类似于这个C的题目:从m个数里面选择n个数的组合
五、回溯法
回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。
希望高手能出手,给出迭代回溯的代码,非常感谢! |
|