package com.supermars.practice; import java.io.BufferedInputStream; import java.util.Arrays; import java.util.Scanner; public class 子集生成增量构造法 { static int A[] = new int[1 << 7]; static Scanner cin = new Scanner(new BufferedInputStream(System.in)); public static void main(String[] args) { while (cin.hasNext()) { int n = cin.nextInt(); /*for (int i = 0; i < n; i++) { A[i] = cin.nextInt(); } Arrays.sort(A, 0, n);*/ print_subset(n, A, 0); } } private static void print_subset(int n, int[] A, int cur) { // 打印当前集合 for (int i = 0; i < cur; i++) { System.out.print(A[i] + " "); } System.out.println(""); // 当前集合最小可能值 int min = cur > 0 ? A[cur-1]+1:0; // 递归构造子集 for (int i = min; i < n; i++) { A[cur] =i; print_subset(n, A, cur + 1); } } }
-------------
package com.supermars.practice; import java.io.BufferedInputStream; import java.util.Scanner; public class 子集生成位量法 { //static int A[] = new int[1 << 7]; static int B[] = new int[1 << 7]; static Scanner cin = new Scanner(new BufferedInputStream(System.in)); public static void main(String[] args) { while (cin.hasNext()) { int n = cin.nextInt(); print_subset(n, B, 0); } } private static void print_subset(int n, int[] B, int cur) { if (n == cur) { for (int i = 0; i < n; i++) { if (B[i] == 1) System.out.print(i + " "); } System.out.println(""); } else { B[cur] = 1; print_subset(n, B, cur + 1); B[cur] = 0; print_subset(n, B, cur + 1); } } }
-------------------
package com.supermars.practice; import java.io.BufferedInputStream; import java.util.Scanner; public class 子集生成二进制法 { //no static int A[] = new int[1 << 7]; static Scanner cin = new Scanner(new BufferedInputStream(System.in)); public static void main(String[] args) { while (cin.hasNext()) { int n = cin.nextInt(); int s = Integer.valueOf(Integer.toBinaryString(n)); for (int i = 0; i < (1 << n); i++) { print_subset(n, i); } } } private static void print_subset(int n, int s) { // s = Integer.valueOf(Integer.toBinaryString(s)); for (int i = 0; i <=n; i++) { // 枚举各值 if (((s & (1 << i)))==1) { System.out.print(i + " "); } } System.out.println(""); } }