递归:全排列的java实现

来源:互联网 发布:同花顺软件下载 编辑:程序博客网 时间:2024/05/21 07:53

全排列:比如有一组数123,它的全排列有123,132,213,231,321,312。下面的实现也考虑了重复的情况。

 

import java.util.Scanner;public class Permlist {/** * R={r1,r2,r3...rn} n=1时,perm(R)=(r),其中r是集合R中的唯一元素 * n>1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),(r3)Perm(R3).....(rn)Perm(Rn)组成 *//* 交换 */void Swap(int[] list, int a, int b) {int temp = list[a];list[a] = list[b];list[b] = temp;}/* 递归排列 */void Perm(int[] list, int k, int m) {if (k == m) {for (int i = 0; i <= m; i++) {System.out.print(list[i]);}System.out.println("  ");} else {for (int i = k; i <= m; i++) {if (Isswap(list, k, i)) { // 去重Swap(list, k, i);  //???Perm(list, k + 1, m);Swap(list, k, i);   //???}}}}/* 判断重复 */boolean Isswap(int[] list, int a, int b) {for (int i = a; i < b; i++)if (list[i] == list[b])return false;return true;}public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.print("请输入数组的长度");int l = in.nextInt();int[] list = new int[l];for (int i = 0; i < l; i++) {System.out.print("请输入全排列的第" + (i + 1) + "个元素");list[i] = in.nextInt();}int k = 0;int m = l - 1;Permlist pl = new Permlist();pl.Perm(list, k, m);}}



0 0
原创粉丝点击