您的位置:首页 > 其它

求集合所有子集问题

2012-10-25 10:20 232 查看
算法思想:集合中的某个元素,要么在子集中,要么不在子集中;

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

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

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

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: