P1088 火星人(全排列,DFS+时间复杂度压缩)
作者:互联网
import java.util.Scanner;
public class P1088 {
static int N,M,T;
static int[] a;
static boolean[] flag;
static boolean[] isVisited;//是否找到结果标记
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt()+1;
a = new int[N+1];
flag = new boolean[N+1];
isVisited = new boolean[N+1];
for(int i=1;i<=N;i++) {
a[i] = sc.nextInt();
}
dfs(1);
for(int i=1;i<=N;i++) {
System.out.print(a[i]+" ");
}
}
private static void dfs(int pos) throws Exception {
if(pos>=N+1) {
M--;
if(M==0) {
return;
}
return;
}
for(int i=(isVisited[pos]?1:a[pos]);i<=N;i++) {
if(flag[i]==false) {
flag[i] = true;
a[pos] = i;
dfs(pos+1);
if(M==0) {
return;
}
flag[i] = false;
}
}
isVisited[pos] = true;
return;
}
}
标签:火星人,Scanner,int,复杂度,DFS,boolean,static,sc,new 来源: https://blog.csdn.net/qq_28635317/article/details/114846882