算法设计技巧与分析第五章介绍了两种生成全排列的方法,第一种是固定数组位置(即首位),将不同的数放到这个位置上,第二种是每次选取序列的最后一个数,放到数组的不同位置上,我们的代码给出了这两者算法的实现
public class PERMUTATIONS15_7 {
static int count=0;
public static void perml(int[] a,int m){
if(m==a.length-1){
count++;
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println("-----------------");
}
else{
for(int j=m;j<a.length;j++){
int temp=a[m];
a[m]=a[j];
a[j]=temp;
perml(a,m+1);
temp=a[m];
a[m]=a[j];
a[j]=temp;
}
}
}
public static void perml2(int[] a,int m){
if(m==0){
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println("----------------");
count++;
}
else{
for(int i=0;i<a.length;i++){
if(a[i]==0){
a[i]=m;
perml2(a,m-1);
a[i]=0;
}
}
}
}
public static void main(String args[]){
int a[]=new int[5];
for(int j=0;j<5;j++){
a[j]=0;
}
perml2(a,5);
System.out.println(count);
}
}