您的位置:首页 > 编程语言 > Java开发

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。递归调用结束。

用图表示如下;



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);
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: