日期:2014-05-20  浏览次数:20713 次

求指导,笨鸟求指导
import java.util.Scanner;


public class enum1 {

/**
 * @param args
 */
public static void main(String[] args) {

Scanner kbd=new Scanner(System.in);
int n=kbd.nextInt();
int[] A=new int[n];
enum1.print_permutation(n, A, 0);
}
static void print_permutation(int n,int[] A,int cur){
int i,j;
if(cur==n){
for(int k=0;k<n;k++)
System.out.print(A[k]+" ");
System.out.println();
}
for(i=1;i<=n;i++){
boolean ok = true;
for(j=0;j<cur;j++){
if(A[j]==i)
ok=false;
}
if(ok){
A[cur]=i;
print_permutation(n, A, cur+1);
}
}
}
}


这是个排列的代码,如输入4:会得出结1 2 3 4 
1 2 4 3 
1 3 2 4 
1 3 4 2 
1 4 2 3 
1 4 3 2 
2 1 3 4 
2 1 4 3 
2 3 1 4 
2 3 4 1 
2 4 1 3 
2 4 3 1 
3 1 2 4 
3 1 4 2 
3 2 1 4 
3 2 4 1 
3 4 1 2 
3 4 2 1 
4 1 2 3 
4 1 3 2 
4 2 1 3 
4 2 3 1 
4 3 1 2 
4 3 2 1 
但我觉得他输出1 2 3 4后,程序就会停止,因为输出结果后cur变5,然后再运行下面的for...哎好难表达啦,当输出了1 2 3 4这结果后,认真看下你调试运行就会发现一个很神奇的东西!!希望有人会发现啦~~!!
------解决方案--------------------
引用:
又好好的看了下,略有眉目。运行的时候应该是这样的,例如输入的是数字3.function(3,A,0)这个是初始值,然后循环递归调用。这个里面有点饶人。function(3,A,0)的时候会初始化这个数组,数组的第一个元素分别是1,2,3,然后给第二个元素赋初值的时候会继续调用本身,if (A[j] == i) ok = false;利用这个if判断语句,跳过了对第一个元素的初始化,然后给第二个元素……

新人需要指导,而不是批评,谁刚开始能写出很精辟的算法。别人是来求教问题的不是让你来说别人算法烂的,谢谢!