回溯法解决阿里面试题之12人排队
来源:互联网 发布:最好的阅读软件 编辑:程序博客网 时间:2024/06/07 10:28
下面是一道阿里的面试题:
个高矮不同的12个人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?
网友给出的解决方案,大多是通过Catalan数来解决的,有万能解题法的回溯法当然也可以解决这个问题,下面是我用回溯法来解决这个问题的java代码:
package com.soft;import java.util.Arrays;/** * 张猛 * 2014年8月20日 * description: * 个高矮不同的人,排成两排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种? */public class LineUp {// 不变信息static int n;// 动态改变信息static int front;// 记录前排的数目static int back;// 记录后排的数目static int count;// 记录解数目/** * @author zhangmeng *@param i 表示第i层,此时决定第i+1个人的位置 */private static void trackback(int i) { // 更新frontif (i < n) {// 如果满足约束条件,搜索左子树if (front < 6 && front >= back) {// 搜索左子树front++;LineUp.trackback(i + 1);//清理现场front--;}// 如果 满足上界函数,搜索右子树if (back < 6 && front >back) {// 更新cxback++;trackback(i + 1);//清理现场back--;}}else{//处理第n层count++;return;}}public static int LineUpCount() {LineUp.n = 12;LineUp.back = 0;LineUp.front = 0;LineUp.count = 0;trackback(0);return LineUp.count;}public static void main(String[] args) { System.out.print(LineUp.LineUpCount());}}
运行结果:132
分析:这是一个子集树问题,这里的子集指的是站在前排人的集合。
约束条件:front < 6 && front >= back
限界条件:back < 6 && front >back
0 0
- 回溯法解决阿里面试题之12人排队
- 用回溯法和栈解决阿里面试题排队问题
- 回溯法解决阿里面试题之括号匹配
- 阿里面试题 hashtable 如何解决冲突
- 排队购票回溯法
- 用回溯法(backtracking)解决平衡集合问题(一道微软公司面试题)
- 用回溯法(backtracking)解决平衡集合问题(一道微软公司面试题)
- 阿里面试题解答
- 阿里面试题
- 阿里面试题备份
- 阿里dba面试题
- 阿里面试题
- 阿里面试题
- 阿里前端面试题
- 阿里前端面试题
- 阿里前端面试题
- 阿里前端面试题
- 阿里面试题
- xStream完美转换XML、JSON
- poj系统训练计划
- MySQL学习笔记(七)查找记录
- matlab中各种线型-颜色-标记点
- c/c++变量内存分配区域
- 回溯法解决阿里面试题之12人排队
- 【IIS】IIS故障问题(Connections_Refused)分析及处理
- 五个好用的网络协议分析工具(附下载)
- 求助帖~.exe 中的 0x10022897 (libcocos2d.dll) 处有未经处理的异常: 0xC0000005: 读取位置 0x00000018 时发生访问冲突
- javascript类型转换
- win7花生壳怎么用
- 软件开发的金字塔
- Windows 下 android自动打包 volley项目
- hdoj 4183 Pahom on Water 【基础最大流】