运维开发网

C#中实现任意List的全组合算法代码

运维开发网 https://www.qedev.com 2020-02-12 18:57 出处:网络 作者: 网络整理
这篇文章主要是介绍了.net C# 实现任意List的全组合算法实现代码,需要的朋友可以参考下

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace 算法

{

    class 全组合算法

    {

        [Flags]

        public enum PersonType

        {

            Audit = 1,

            Child = 2,

            Senior = 4

        }

        public static void Run(string[] args)

        {

            var lstSource = GetEnumList<PersonType>();

            var lstComb = FullCombination(lstSource);

            var lstResult = new List<PersonType>();

            lstComb.ForEach(item =>

            {

                lstResult.Add(item.Aggregate((result, source) => result | source));

            });

        }

        public static List<T> GetEnumList<T>()

        {

            var lst = new List<T>();

            foreach (T item in Enum.GetValues(typeof(T)))

            {

                lst.Add(item);

            }

            return lst;

        }

        //全组合算法

        public static List<List<T>> FullCombination<T>(List<T> lstSource)

        {

            var n = lstSource.Count;

            var max = 1 << n;

            var lstResult = new List<List<T>>();

            for (var i = 0; i < max; i++)

            {

                var lstTemp = new List<T>();

                for (var j = 0; j < n; j++)

                {

                    if ((i >> j & 1) > 0)

                    {

                        lstTemp.Add(lstSource[j]);

                    }

                }

                lstResult.Add(lstTemp);

            }

            lstResult.RemoveAt(0);

            return lstResult;

        }

    }

}

0

精彩评论

暂无评论...
验证码 换一张
取 消