No.7 递归实现输出所有子集

    科技2022-07-14  128

    No.7 递归实现输出所有子集

    输入n; 输出{‘a’,‘b’,‘c’,…,‘a’+n-1}的所有子集 是使用递归实现的:

    #include<iostream> #include<fstream> using namespace std; void print(int a[], int num) { int check = 0; for (int i =0; i < num; i++) { if (a[i]==1) { if (check == 0) { cout << char('a' + i); check = 1; continue; } cout << ' ' << char('a' + i); } } cout << endl; } void subset(int x,int n,int num,int a[] ) { if (n == 0) { //空集的情况,打印,递归终止 cout << endl;//空集打印 } else if (n == 1) { //在剩下的数当中取出一个来,一个的情况好写,所以在这里结束递归 for (int j = x; j < num;j++) { a[j] = 1; print(a,num); //非空集的打印 a[j] = 0; } } else { for (int i = x; i < num - n + 1; i++) { //取用多个时,递归,逐渐划分为以上的情况 a[i] = 1; subset(i + 1, n - 1, num,a); a[i] = 0; } } return; } int main() { ifstream infile("input.txt"); int n; infile>> n; if (n < 1 || n>26) { cout << "WRONG" << endl; } else { int *a; a = new int[n]; for (int i = 0; i < n; i++) { a[i] = 0; } for (int i = 0; i <= n; i++) { subset(0, i, n,a); } delete[] a; } return 0; }
    Processed: 0.010, SQL: 8