public class Main {
//方法一:自动生成有序数组,
static int a[] = new int[11];
static int vis[] = new int[11];
public static void dfs(int start){
if(start == 10){
for(int i=1;i<10;i++){
System.out.print(a[i] + " ");
}
System.out.println();
}else{
for(int i=1;i<10;i++){
if(vis[i]==1){
continue;
}
a[start]=i;
vis[i]=1;
dfs(start+1);
vis[i]=0;
}
}
}
//方法二:第一好了数组,把定义好的数组全排列
public static void perm(int[] num, int i) {
if(i < num.length - 1) {
for(int j = i; j <= num.length - 1; j++) {
int tmp = num[j];
// 旋转该区段最右边数字至最左边
for(int k = j; k > i; k--)
num[k] = num[k-1];
num[i] = tmp;
perm(num, i+1);
// 还原
for(int k = i; k < j; k++)
num[k] = num[k+1];
num[j] = tmp;
}
}
else { // 显示此次排列
for(int j = 1; j <= num.length - 1; j++)
System.out.print(num[j] + " ");
System.out.println();
}
}
public static void main(String[] args) {
int num[] = new int[11];
for(int i=1;i<11;i++){
num[i]=i;
}
//方法一
// perm(num,1);
//方法二
dfs(1);
}
}
//方法一:自动生成有序数组,
static int a[] = new int[11];
static int vis[] = new int[11];
public static void dfs(int start){
if(start == 10){
for(int i=1;i<10;i++){
System.out.print(a[i] + " ");
}
System.out.println();
}else{
for(int i=1;i<10;i++){
if(vis[i]==1){
continue;
}
a[start]=i;
vis[i]=1;
dfs(start+1);
vis[i]=0;
}
}
}
//方法二:第一好了数组,把定义好的数组全排列
public static void perm(int[] num, int i) {
if(i < num.length - 1) {
for(int j = i; j <= num.length - 1; j++) {
int tmp = num[j];
// 旋转该区段最右边数字至最左边
for(int k = j; k > i; k--)
num[k] = num[k-1];
num[i] = tmp;
perm(num, i+1);
// 还原
for(int k = i; k < j; k++)
num[k] = num[k+1];
num[j] = tmp;
}
}
else { // 显示此次排列
for(int j = 1; j <= num.length - 1; j++)
System.out.print(num[j] + " ");
System.out.println();
}
}
public static void main(String[] args) {
int num[] = new int[11];
for(int i=1;i<11;i++){
num[i]=i;
}
//方法一
// perm(num,1);
//方法二
dfs(1);
}
}