java 实现的用递归法实现全排列问题

来源:互联网 发布:火星潮牌淘宝 编辑:程序博客网 时间:2024/05/16 23:37

算法设计与分析 王晓东 感谢老师

Perm(list,k,m)

1.当 k == m,即元素已经全排列,那么输出打印即可。

2当 k+1 = m ,那么此时只有两个元素,输出两种排列情况:原数列,交换后的数列。

3.当 k+2 = m,那么此时有三个元素。设顺序确定为x1x2x3.

1)  X1不变,对剩下的两个元素全排列,如2

2)  交换x1x2,对剩下的两个元素全排列,如2

3)交换x1,x3,对剩下的两个元素全排列,如2

4.当 k+3 = m,那么此时有四个元素。设顺序确定为x1x2x3x4

1)  X1不变,对剩下的三个元素全排列,如3

2)  交换x1x2,对剩下的三个元素全排列,如3

3)交换x1x3,对剩下的三个元素全排列,如3

4) 交换x1x4,对剩下的三个元素全排列,如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);}}


0 0