zoukankan      html  css  js  c++  java
  • 集合遍历(子集遍历)--二进制

     集合的概念

    写法一:

     

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int u;
     4 int n, a[10];
     5 int main()
     6 {
     7     cin>>n;
     8     for(int i=0; i<n; i++)
     9         cin>>a[i];
    10         
    11     cout<<"原集合为:{";
    12     for(int i=0; i<n; i++)
    13         cout<<a[i]<<",";
    14     cout<<"}"<<endl;
    15     
    16     //将集合转二进制 
    17     for(int i=0; i<4; i++){
    18         u+=(1<<a[i]);
    19     }
    20     
    21     cout<<"该集合的非空子集为"<<endl;
    22     // 遍历 u 的非空子集
    23     for(int s = u; s; s = (s - 1) & u) {
    24       // s 是 u 的一个非空子集
    25         int t=s;
    26         cout<<"{";
    27         for(int i=0; i<=8; i++){
    28             if(t & (1<<i))
    29                 cout<<i<<",";
    30         }
    31         cout<<"}";
    32         cout<<endl;
    33     }
    34 
    35     return 0;
    36 }

    写法二:相关链接https://www.cnblogs.com/tflsnoi/p/11946748.html

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int a[10];
     4 void print_subset(int n)
     5 {
     6     for(int i=0; i<(1<<n); i++){
     7         for(int j=0; j<n; j++)
     8             if(i&(1<<j))
     9                 cout<<a[j]<<" ";
    10         cout<<endl;
    11     }
    12 }
    13 int main()
    14 {
    15     int n;
    16     cin>>n;
    17     for(int i=0; i<n; i++)
    18         cin>>a[i];
    19     print_subset(n);
    20     return 0;
    21  }

    时间复杂度:n*2n

     

     

     

  • 相关阅读:
    js
    DOM
    css
    html
    java虚拟机
    java并发
    java容器
    java基础
    计算机网络面试题
    计算机操作系统-设备管理
  • 原文地址:https://www.cnblogs.com/tflsnoi/p/15328899.html
Copyright © 2011-2022 走看看