c# 回溯法 求含n个元素的集合的幂集

比如A={1,2,3},那么A的幂集为P(A)={{1,2,3},{1,2},{1,3},{1},{2,3},{2},{3},{空}}

  class Program
    {
        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();
            B.Add("0");
            B.Add("0");
            B.Add("0");
            B.Add("0");
            B.Add("0");
            Program p = new Program();
            p.GetPowerSet(0,A,B);
            Console.ReadKey();
        }
       
        /// <summary>
        /// 算出幂集合输出
        /// </summary>
        /// <param name="i"></param>
        /// <param name="A"></param>
        /// <param name="B"></param>
        void GetPowerSet(int i, ArrayList A, ArrayList B)
        {
            if (i == A.Count)
            {
                Output(B);
            }
            else
            {
                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);
            }
        }
        /// <summary>
        /// 输出其中的一个幂集
        /// </summary>
        /// <param name="B"></param>
        void Output(ArrayList B)
        {
            foreach (var b in B)
            {
                Console.Write(" " + b.ToString());
            }
            Console.WriteLine();
        }
        /// <summary>
        /// 得到一个A集合中的一个集
        /// </summary>
        /// <param name="A"></param>
        /// <param name="i"></param>
        /// <returns></returns>
        string GetElem(ArrayList A, int i)
        {
            return A[i].ToString();
        }
        /// <summary>
        /// 这个是为了排除0的长度
        /// </summary>
        /// <param name="A"></param>
        /// <returns></returns>
        int GetLength(ArrayList A)
        {
            int i = 0;
            foreach (string a in A)
            {
                if (a != "0")
                {
                    i++;
                }
            }
            return i;
        }
    }

 

 

posted on 2013-02-28 16:07  R.Ray  阅读(368)  评论(0)    收藏  举报

导航