求集合所有子集问题

来源:互联网 发布:业务员提成软件 编辑:程序博客网 时间:2024/05/29 19:39

算法思想:集合中的某个元素,要么在子集中,要么不在子集中;

                 每次从集合中取一个元素,将该元素放在子集中,继续取元素直到集合尾部;

                 将该元素从子集中删除,继续取元素知道集合尾部;

                 在到达集合尾部时,输出子集中的元素。


C#实现:

/// <summary>       /// 求集合的所有子集       /// </summary>       /// <param name="a">集合</param>       /// <param name="i">已对集合中的第i-1个元素取舍</param>       /// <param name="n">集合元素的个数</param>       /// <param name="b">临时集合,用来输出子集</param>       void PowerSet(int[] a,int i,int n,List<int> b)       {           if(i>n) //到达集合尾部输出子集元素           {               Console.Write(" { ");               for (int j = 0; j < b.Count;j++ )               {                   if(j < (b.Count - 1))                       Console.Write(b[j] + " , ");                   else                       Console.Write(b[j] + " } ");               }               if(b.Count==0)               {                   Console.Write(" } ");               }               Console.WriteLine();           }           else           {               int x = a[i-1];                b.Add(x);    //取               PowerSet(a, i + 1, n, b);               b.Remove(x); //舍               PowerSet(a, i + 1, n, b);           }       }