问一个算法问题(我个人感觉不是很简单)
问题很简单,给出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+"种排列"); } }
[ 本帖最后由 lampeter123 于 2010-5-22 14:01 编辑 ]