问一个算法问题(我个人感觉不是很简单)
问题很简单,给出1到n n个整数,请把这些数的所有出现顺序可能列出来。比如:n=9,即把1到9九个数的所有出现顺序情况列出来。可能是123456789,也可能是654123987或其它情况,总之要求全部列出来。请大家思考思考,锻炼大家的思维!----------------解决方案--------------------------------------------------------
程序代码:
import java.util.*;
public class Permutation {
public int count=0; //统计总共排列数
public void permutate(String[] array,int i,int j){ //排列递归算法,排列下标从i--j
if(i>j){ //下标i大于j说明已完成一次排列
count++;
for(int k=0;k<array.length;k++){
System.out.print(array[k]+" ");
}
System.out.println();
}else{ //否则分别将i--j的数据与下标为i的位置交换数据,构成前缀,再全排列i+1---j的
for(int x=i;x<array.length;x++){
swap(array,i,x);
permutate(array,i+1,j);
swap(array,x,i); //一种情况完成,要恢复
}
}
}
public void swap(String[] array,int m,int n){
String t;
t=array[m];
array[m]=array[n];
array[n]=t;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("n=?");
int n = in.nextInt();
String[] test = new String[n];
for(int i=0;i<n;i++) {
test[i] = ""+(i+1);
}
Permutation permutation = new Permutation();
permutation.permutate(test,0,n-1); //从下标0--n-1
System.out.println("总共有"+permutation.count+"种排列");
}
}
public class Permutation {
public int count=0; //统计总共排列数
public void permutate(String[] array,int i,int j){ //排列递归算法,排列下标从i--j
if(i>j){ //下标i大于j说明已完成一次排列
count++;
for(int k=0;k<array.length;k++){
System.out.print(array[k]+" ");
}
System.out.println();
}else{ //否则分别将i--j的数据与下标为i的位置交换数据,构成前缀,再全排列i+1---j的
for(int x=i;x<array.length;x++){
swap(array,i,x);
permutate(array,i+1,j);
swap(array,x,i); //一种情况完成,要恢复
}
}
}
public void swap(String[] array,int m,int n){
String t;
t=array[m];
array[m]=array[n];
array[n]=t;
}
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("n=?");
int n = in.nextInt();
String[] test = new String[n];
for(int i=0;i<n;i++) {
test[i] = ""+(i+1);
}
Permutation permutation = new Permutation();
permutation.permutate(test,0,n-1); //从下标0--n-1
System.out.println("总共有"+permutation.count+"种排列");
}
}
[ 本帖最后由 lampeter123 于 2010-5-22 14:01 编辑 ]
----------------解决方案--------------------------------------------------------
漂亮!我也找了很久了,谢谢楼上的 还有楼主
----------------解决方案--------------------------------------------------------