92. 递归实现指数型枚举
import java.util.Scanner;public class Main {static int N = 16;static int n;static int[] st = new int[N]; public static void dfs(int u) {if(u > n) {for(int i=1;i<=n;i++) {if(st[i] == 1)System.out.print(i+" ");}System.out.println();return ;}st[u] = 2;dfs(u+1);st[u] = 0; st[u] = 1;dfs(u+1);st[u] = 0; }public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();dfs(1);}
}
94. 递归实现排列型枚举
import java.util.Scanner;public class Main {static int N = 10;static int n;static int[] st = new int[N]; static boolean[] vis = new boolean[N]; public static void dfs(int u) {if(u > n) {for(int i=1;i<=n;i++) {System.out.print(st[i]+" ");}System.out.println();return ;}for(int i=1;i<=n;i++) {if(!vis[i]) {st[u] = i;vis[i] = true;dfs(u+1);st[u] = 0;vis[i] = false;}}}public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();dfs(1);}
}
93. 递归实现组合型枚举
import java.util.Scanner;public class Main {static int N = 26;static int n;static int m;static int[] st = new int[N]; public static void dfs(int u,int start) {if(u > m) {for(int i=1;i<=m;i++) {System.out.print(st[i]+" ");}System.out.println();return ;}for(int i=start;i<=n;i++) {st[u] = i;dfs(u+1,i+1);st[u] = 0;} }public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();//u和startdfs(1,1);}
}