zoukankan      html  css  js  c++  java
  • 全排列和组合算法

    C#中使用的全排列和组合算法:

            /// <summary>
            /// 对数组进行组合操作,选取selectCount个元素进行组合
            /// </summary>
            /// <param name="lsArray">即将进行组合操作的数组</param>
            /// <param name="selectCount">选取的元素的个数</param>
            static void Combination(List<string> lsArray, int selectCount)
            {
                int totolcount = lsArray.Count;
                int[] currectselect = new int[selectCount];
                int last = selectCount - 1;
                for (int i = 0; i < selectCount; i++)
                {
                    currectselect[i] = i;
                }
                while (true)
                {
                    for (int i = 0; i < selectCount; i++)
                    {
                        Console.Write(" {0} ", lsArray[currectselect[i]]);
                    }
                    Console.WriteLine();
                    if (currectselect[last] < totolcount - 1)
                    {
                        currectselect[last]++;
                    }
                    else
                    {
                        int pos = last;
                        while (pos > 0 && currectselect[pos - 1] == currectselect[pos] - 1)
                        {
                            pos--;
                        }
                        if (pos == 0) return;
                        currectselect[pos - 1]++;
                        for (int i = pos; i < selectCount; i++)
                        {
                            currectselect[i] = currectselect[i - 1] + 1;
                        }
                    }
                }
            }
    

     排列算法(递归):

            /// <summary>
            /// 对数组进行全排列
            /// </summary>
            /// <param name="lsArray">要进行全排列的数组</param>
            /// <param name="begin">进行全排列的开始下标</param>
            /// <param name="end">进行全排列的结束下标</param>
            static void array(List<string> lsArray, int begin, int end)
            {
                if (begin == end)
                {
                    for (int i = 0; i <= end; i++)
                        Console.Write(" {0} ", lsArray[i]);
                    Console.WriteLine();
                }
                for (int i = begin; i <= end; i++)
                {
                    Swap(lsArray, begin, i);
                    array(lsArray, begin + 1, end);
                    Swap(lsArray, begin, i);
                }
            }
    
            /// <summary>
            /// 交换数组中的下标为x,y的值
            /// </summary>
            /// <param name="lsArray">该数组</param>
            /// <param name="x"></param>
            /// <param name="y"></param>
            static void Swap(List<string> lsArray, int x, int y)
            {
                string t = lsArray[x];
                lsArray[x] = lsArray[y];
                lsArray[y] = t;
            }
    
  • 相关阅读:
    TCP的三次握手和四次挥手理解及面试题
    linux网卡配置文件参数
    linux的常用指令和配置文件
    django中的modelform和modelfoemset
    django中的form表单验证
    php快速开发的学习经历
    一个微信支付商场的经历
    https的学习过程
    使用java访问elasticsearch创建索引
    写博客是为什么
  • 原文地址:https://www.cnblogs.com/rainnight/p/2557622.html
Copyright © 2011-2022 走看看