回溯法打印卡特兰数问题--牛客编程题解题记录
来源:互联网 发布:淘宝直通车在哪设置 编辑:程序博客网 时间:2024/06/06 00:20
今天在牛客上做到一个题,用到了卡特兰数的知识。
那道题我会单独写一篇博客,这里把其中一个子问题抽象出来,给出代码方案:
给了长度为2n的顺序数列,先将数列分成两排,要求第一排的每一列小于等于对应的第二排的数字,每排顺序排列,打印出所有排序方案。
这里我用回溯方法解决,对所有方案进行深度优先遍历,如果‘0的数量大于1’(参加上文排队问题),则返回上层。
这里我构造了两个空数列:firstLine和secondLine,从头到尾遍历长度为2n的原数组arr,每次都有两个选择方案:将arr[i]放入到firstLine或secondLine。怎么放呢?没关系,我们先进行遍历,按顺序来,如果放入后firstLine的长度大于等于secondLine,则进入下层循环。另外,为了保证回溯,一定要记得及时清理状态,在每次循环后将两个数组的状态返回为上一层的样子。
代码如下:
function catalanSort(arr,firstLine,secondLine,i){ var n=arr.length/2; if(firstLine.length==n) { //搜索到叶节点,输出一个结果 console.log(firstLine); } else { for (var j = 0; j < 2; j++) { //枚举所有可能的路径 if (j == 0) { firstLine.push(arr[i]); } else { secondLine.push(arr[i]); } //判断是否满足约束条件 if (firstLine.length >= secondLine.length) { //满足条件,扩展搜索空间 catalanSort(arr,firstLine,secondLine,i+1); } //回溯前的清理工作:清除所占的状态资源 if(j==0){ firstLine.pop(); }else{ secondLine.pop(); } } }}
调用方式就是:
catalanSort(arr,[],[],0)
阅读全文
0 0
- 回溯法打印卡特兰数问题--牛客编程题解题记录
- 卡特兰数问题
- 卡特兰数问题
- 卡特兰数编程应用
- 卡特兰数求解问题
- 卡特兰数问题总结
- 卡特兰数-组合问题
- 卡特兰数相关问题
- 卡特兰数相关问题
- 卡特兰数相关问题
- 卡特兰数问题汇总
- 【卡特兰数】BZOJ1856(Scoi2010)[字符串]题解
- 编程之美4.3扩展问题(卡特兰数)
- 卡特兰数类似问题通解
- 卡特兰数(Catalan)相关问题
- 卡特兰数相关问题总结
- 标准二维表问题 (卡特兰数)
- 卡特兰数,高精度卡特兰数
- 个人学习总结一机器学习入门(六)
- 史上最负盛名的电脑病毒 “比特币病毒”VS“熊猫烧香”
- hbase查找数据路由试验
- 根目录解释
- 面向对象 接口之代理模式(ProxySubject)
- 回溯法打印卡特兰数问题--牛客编程题解题记录
- ArrayList
- 乐视体育取消欧冠半决赛直播 欧冠版权或生变数
- vuex
- 2017最新vue.js1.0/vue.js2.0视频教程共12套
- Caffe学习(1): Caffe Tutorial阅读笔记
- struts6
- Codeforces Round #408 /Mcvi Round #8 C Bank Hacking
- JVM初窥:虚拟机字节码执行引擎