第一种方法:
package com.tjrac_java_2;import java.util.Scanner;public class Fun {public static int s=0;static int[] a=new int[100000];public static void main(String[] args) {int n;Scanner sc = new Scanner(System.in);n=sc.nextInt();for (int i = 1; i <= n; i++) {a[i]=sc.nextInt();}DFS(1,n);}private static void DFS(int from, int to) {if(from>to){s++;for (int i = 1; i <= to; i++) {System.out.print(a[i]+" ");}System.out.println();}for(int i = from; i <= to; i++){swap(i,from);DFS(from+1,to);swap(from,i);}}private static void swap(int x, int y) {int temp = a[x];a[x]=y;a[y]=temp;}
}
第二种方法:
package com.tjrac_java_2;import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.util.Vector;public class TT {static int[] a = new int[10];static int[] b = new int[10];static int n;static int sum=0;public static void main(String[] args) {Scanner sc = new Scanner(System.in);while(sc.hasNext()){n=sc.nextInt();for(int i=1;i<=n;i++){a[1]=i;DFS(2);}System.out.println(sum);}}private static void DFS(int index) {if(index>n){sum++;for (int i = 1; i <= n; i++) {System.out.print(a[i]);} System.out.println();return;}for (int i = 1; i <= n; i++) {a[index]=i;if(check(index)){DFS(index+1);}}}private static boolean check(int index) {for (int i = 1; i < index; i++) {if(a[i]==a[index]){return false;}}return true;}
}