要求排列出1到9数字组成的全排列,这里利用的是for循环的回溯法。
public static void main(String args[]){
int a[] = new int []{1,2,3,4,5,6,7,8,9};
f(a,0);//从第0位开始排到第8位
}
public static void f(int a[],int k){
if(k == 9){
printf(a,data) ;//如果为9即确定到了第九位就说明已经排完了一趟,此时可以调用函数进行打印
}
else{
for( int i = k;i<a.length;i++){//利用循环将a[i]和a[k]的值互换,即在剩余的数字中选择一个数字进行填入i,循环则是对剩余数字的遍历相当于每个数字都被挑选过了
int temp = a[k];
a[k] = a[i];
a[i] = temp;
f(a,k+1,data);//运行到这里就说明上一位已经挑选好,此时应该进行第i+1了
temp = a[k];//运行到这那肯定就是上一语句已经运行完,对于此处的f函数运行完就只有一种情况:k==9,已经到头所以要回头继续遍历另一种情况,此时要恢复原来a[i]和a[k]的值没有互换的情况
a[k] = a[i];
a[i] = temp;
}
}
}