輸出一個集合的所有子集(算法)


轉自輸出一個集合的所有子集(算法)


時間復雜度很顯然,最少也是2^n,空間復雜度,是n,代碼比較簡單(每個元素要么在子集中,要么不在,用 j 的二進制形式的每一位代表數組a中對應的位置的元素是否在子集中,例如,當i = 5時, j = i = 5,那么j = 0101; 我們對應的輸出 a[0], a[2], 這個過程在while循環中完成)

  1. #include <stdio.h>  
  2.   
  3. int main()  
  4. {  
  5.         int a[4] = {1, 2, 3, 4};  
  6.         int i, j, k;  
  7.         int t = 1 << 4;  
  8.         for (i = 0; i < t; i++)  
  9.         {  
  10.                 j = i;  
  11.                 k = 0;  
  12.                 printf("{");  
  13.                 while (j)  
  14.                 {  
  15.                         if (j & 1)  
  16.                         {  
  17.                                 printf("%d", a[k]);  
  18.                         }  
  19.                         j >>= 1;  
  20.                         ++k;  
  21.                 }  
  22.                 printf("}\n");  
  23.         }  
  24.         return 0;  
  25. }  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM