Acwing1534 递归实现排列类型枚举 2
Last updated
Last updated
1 1 2
1 2 1
2 1 1PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
out.print(Temp[j]+" ");
out.println();
out.flush(); //需要刷新屏幕StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));//定义一个StreamTokenizer
for(int i=0;i<N;i++){
in.nextToken(); //切换到下一个
Num[i]=(int)(in.nval); //读取切换后的值
}import java.io.*;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int N;
static int[] Num;
static int[] Temp;
static boolean[] state;
static PrintWriter out;
public static void DFS(int i){
if(i == N){
for(int j =0;j<N;j++){
out.print(Temp[j]+" ");
}
out.println();
return;
}
for (int j =0;j<N;j++){
if (!state[j]){
Temp[i]=Num[j];
state[j]=true;
DFS(i+1);
state[j]=false;
while(j+1<N&&Num[j]==Num[j+1])j++;
}
}
}
public static void main(String[] args) throws IOException {
StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
in.nextToken();
N=(int)(in.nval);
out= new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
Num=new int[N];
Temp=new int[N];
state = new boolean[N];
for(int i=0;i<N;i++){
in.nextToken();
Num[i]=(int)(in.nval);
}
long startTime = System.nanoTime();
Arrays.sort(Num);
DFS(0);
long endTime = System.nanoTime();
// out.println("time:"+(endTime-startTime)/1000000);
out.flush();
}
}