c#求幂集
发布网友
发布时间:2024-03-06 21:19
我来回答
共1个回答
热心网友
时间:2024-04-12 19:24
你这用的回溯法
string x = GetElem(A, i);
int k = GetLength(B);
B.Insert(k, x);
GetPowerSet(i + 1, A, B);
B.RemoveAt(k);
GetPowerSet(i + 1, A, B);
每次先左加再右去,相当于在A的基础上每次左右移动一位,B就是移动后的结果,移到最后B就是空了,也就是最后那个{空}。
你要想记录最后的结果,那你还得引入第三个集合C。
修改后如下:
static void Main(string[] args)
{
ArrayList A = new ArrayList();
A.Add("1");
A.Add("2");
A.Add("3");
A.Add("4");
ArrayList B = new ArrayList();
List<ArrayList> C = new List<ArrayList>(); // 结果集
Program p = new Program();
p.GetPowerSet(0, A, B, ref C);
Console.WriteLine(C.Count);
Console.ReadLine();
}
void GetPowerSet(int i, ArrayList A, ArrayList B, ref List<ArrayList> C)
{
if (i == A.Count)
{
C.Add(B);
}
else
{
string x = GetElem(A, i);
int k = GetLength(B);
B.Insert(k, x);
GetPowerSet(i + 1, A, B, ref C);
B.RemoveAt(k);
GetPowerSet(i + 1, A, B, ref C);
}
}
string GetElem(ArrayList A, int i)
{
return A[i].ToString();
}
int GetLength(ArrayList A)
{
int i = 0;
foreach (string a in A)
{
if (a != "0")
{
i++;
}
}
return i;
}