问题描述:将8个"车"放在8*8的国际象棋盘上,如果他们两两均不能互吃,那么称8个"车"处于一个安全状态。问共有多少种不同的安全状态?
解题思路:8个车处于安全状态当且仅当它们处于不同的8行8列上。用一个排列A1,A2,A3,....A8,对应一个安全状态,使A1表示第i行的A1列上放置一个"车"。这种对应显然是一对一的。因此,安全状态的总数等于这个数的全排列总数8!=40320。
程序实现思路:设F(N) = N!,由于N!=N*(N-1)....2*1;那么有递归方程式: F(N) = N*F(N-1);
public static List<StringBuffer> Pmin(char[] source, int len) {
// 当前全排列的结果集合
List<StringBuffer> currSet = new ArrayList<StringBuffer>();
// 递归出口
if(len == 1){
currSet.add(new StringBuffer(String.valueOf(source[0])));
return currSet;
}
List<StringBuffer> lstSet = null;
// 取得(N-1)!=N-1的全排列
lstSet = Pmin(source, len - 1);
//-----------------------------------------------------------------
// 对(N-1)!得到的排列字符集合进行字符插入操作,得到N!
//-----------------------------------------------------------------
// 插入字符
String currChar = String.valueOf(source[len - 1]);
for(int index = 0; index < lstSet.size(); index++){
StringBuffer currSb = lstSet.get(index);
for(int i = 0; i < currSb.length() + 1; i++){
StringBuffer nxtSb = new StringBuffer(currSb);
nxtSb.insert(i, currChar);
currSet.add(nxtSb);
}
}
return currSet;
}
只可惜不能递归多层,10个字符的全排列就然JDK受不了。那位牛人知道这个实现的优化,请不吝指导。
分享到:
相关推荐
实现全排列组合的算法,供大家学习与参考。在需要对排列组合做差异分析的时候可以直接使用。例如:几个正则式的不同排列组合对匹配效果的影响
大一时候使用javascript写的全排列算法演示(分为回溯法演示和交换法演示),既可以用来学习javascript,又可以用来加深对全排列算法的理解,有需要的朋友们可以下载~
主要介绍了C语言实现全排列算法模板的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
主要介绍了JAVA用递归实现全排列算法的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
java算法分析与设计之全排列问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,尤其...
这篇文章主要介绍了如何通过python实现全排列,文中通过示例代码介绍的...相关全排列算法: def perm(l): if(len(l)<=1): return [l] r=[] for i in range(len(l)): s=l[:i]+l[i+1:] p=perm(s) for x in p:
o 6.15 本章习题 第七章 机器学习 o 7.1 K 近邻算法 o 7.2 支持向量机 附录 更多题型 o 附录 A 语言基础 o 附录 B 概率统计 o 附录 C 智力逻辑 o 附录 D 系统设计 o 附录 E 操作系统 o 附录 F 网络协议
本算法是用全排列问题来解决旅行商问题,得到最小花费,同时记录最优路径。。属于暴利枚举,简单,容易理解。学会了这个,大家就可以学习回溯法的旅行商问题了。。
* 编程实现一组数据集合的全排列 ## 排序 * 实现归并排序、快速排序、插入排序、冒泡排序、选择排序* 编程实现O(n)时间复杂度内找到一组数据的第K大元素 ## 二分查找 * 实现一个有序数组的二分查找算法* 实现模糊二...
最近在学一些基础的算法,发现我的数学功底太差劲了,特别是大学的这一部分,概率论、线性代数、高数等等,这些大学学的我是忘得一干二净(我当时学的时候也不见得真的懂),导致现在学习算法,非常的吃力。...
《妙趣横生的算法(C语言实现)》可作为算法入门人员的教程,也可以作为学习过C语言程序设计的人士继续深造的理想读物,也可作为具有一定经验的程序设计人员巩固和提高编程水平,查阅相关算法实现和数据结构知识的参考...
记录器算法学习2021-01-17 16:32:07动态规划-斐波那契数列2021-01-19 19:44:51动态规划-凑硬币回溯算法-全排列2021-01-20 16:50:49回溯算法N皇后2021-01-21 20:21:38 bfs -二叉树最小深度
组合数学之EVEN法生成排列 学习组合数学的朋友可以参考一下
该资源适合计算机相关专业(如人工智能、通信工程、自动化、软件工程等)的在校学生、老师或者企业员工下载,适合小白学习或者实际项目借鉴参考! 当然也可作为毕业设计、课程设计、课程作业、项目初期立项演示等。...
刚刚开始学习python,当前看到了函数这一节。结合数组操作,写了个非递归的全排列生成。原理是插入法,也就是在一个有n个元素的已有排列中,后加入的元素,依次在前,中,后的每一个位置插入,生成n+1个新的全排列。...
我的算法知识学习 动态规划 整数拆分 leetcode 343 整数拆分 爬楼梯 leetcode 70 贪心算法 买股票2 leetcode 122 换酒问题 leetcode 1518 钞票支付问题 分糖果问题 leetcode 455 摇摆序列 leetcode 376 移掉k位数字 ...
随笔记录学算法还有其他知识作为基础,其对应的目录下是学习资料以及总结。LeetCode 目录是刷题的记录,如果对应的题目下有同名的 MD 文件是对应的题解记录。学习方向算法文章刷题打卡71.简化路径|刷题打卡141.环形...
首先对SOINN算法进行改进:在SOINN算法竞争学习周期内,根据全排列思想搜索所有样本输入次序下神经元的权重调节量,计算所有权重调节量的平均值作为神经元最终权重调节量,避免不同样本输入次序影响训练所得神经网络...
该项目用于积累学习中的问题,记录一些有效的代码,其中包括一些算法题、设计模式。 Author 小曾 E-mail 目录 矩阵顺序输出 喝汽水问题 数组全排列 工厂模式 抽象工厂模式 单例模式 建造者模式 原型模式 适配器模式 ...
记录一下学习算法的一些代码。 冗余连接 II 全排列 II 左叶子之和 子集 把二叉搜索树转换为累加树 监控二叉树 合并二叉树 二叉搜索树中的众数 从中序与后序遍历序列构造二叉树 路径总和 II 二叉搜索树的最近公共祖先...