java 实现的用递归法实现全排列问题
2014-04-21 17:03
337 查看
算法设计与分析 王晓东 感谢老师
Perm(list,k,m)
1.当 k == m,即元素已经全排列,那么输出打印即可。
2当 k+1 = m ,那么此时只有两个元素,输出两种排列情况:原数列,交换后的数列。
3.当 k+2 = m,那么此时有三个元素。设顺序确定为x1、x2、x3.
1) X1不变,对剩下的两个元素全排列,如2
2) 交换x1、x2,对剩下的两个元素全排列,如2
3)交换x1,x3,对剩下的两个元素全排列,如2
4.当 k+3 = m,那么此时有四个元素。设顺序确定为x1、x2、x3、x4
1) X1不变,对剩下的三个元素全排列,如3
2) 交换x1、x2,对剩下的三个元素全排列,如3
3)交换x1、x3,对剩下的三个元素全排列,如3
4) 交换x1、x4,对剩下的三个元素全排列,如3
以此类推,直到k==m。递归调用结束。
用图表示如下;
Perm(list,k,m)
1.当 k == m,即元素已经全排列,那么输出打印即可。
2当 k+1 = m ,那么此时只有两个元素,输出两种排列情况:原数列,交换后的数列。
3.当 k+2 = m,那么此时有三个元素。设顺序确定为x1、x2、x3.
1) X1不变,对剩下的两个元素全排列,如2
2) 交换x1、x2,对剩下的两个元素全排列,如2
3)交换x1,x3,对剩下的两个元素全排列,如2
4.当 k+3 = m,那么此时有四个元素。设顺序确定为x1、x2、x3、x4
1) X1不变,对剩下的三个元素全排列,如3
2) 交换x1、x2,对剩下的三个元素全排列,如3
3)交换x1、x3,对剩下的三个元素全排列,如3
4) 交换x1、x4,对剩下的三个元素全排列,如3
以此类推,直到k==m。递归调用结束。
用图表示如下;
package com.wjl; public class Perm { static int count = 0; public void perm(int[] list, int k, int m) { if(k == m) { for(int i= 0; i<= m; i++) { System.out.println(list[i]); } System.out.println("排列数:"+(++count)); } else for(int i = k; i<= m; i++) { System.out.println("before "+list[k]+" "+list[m]); MyMath.swap(list, k, i); System.out.println("after "+list[k]+" "+list[m]); perm(list,k+1,m); MyMath.swap(list, k,i); } } public static void main(String[] args) { int[] list = new int[]{1,2,3,4}; Perm p = new Perm(); p.perm(list,0,3); } }
相关文章推荐
- 字符串全排列问题 java语言实现
- Java 非递归实现的排列组合中的平均分组问题
- java实现全排列问题(含相等元素)
- 排列问题java实现
- java实现全排列问题
- java实现字符串排列组合问题
- java实现八皇后的排列问题
- Cantor展开、全排列问题、魔板问题(JAVA实现)
- java实现全排列问题
- 求全排列问题--- java实现
- 算法java实现--回溯法--圆排列问题--排列树
- java实现字符串排列组合问题
- 多个数组间元素排列组合问题求解(Java实现)
- 多个数组间元素排列组合问题求解(Java实现) 标签: 递归排列组合循环
- java实现多个文件中数据去重问题并按升序排列
- java实现1、2、2、3、4、5排列问题
- java实现最长公共子序列问题
- java代码实现贪心算法删除数字问题
- 动态规划法解旅行商问题(TSP)问题的java实现
- 海康SDK-javademo实现报错问题解决