字典序全排列算法研究

字典序全排列算法研究

递归方法求全排列:

递归方法很容易理解:分别将每个位置交换到最前面位,之后全排列剩下的位。

【例】递归全排列 1 2 3 4 5
1,for循环将每个位置的数据交换到第一位
swap(1,1~5)
2,按相同的方式全排列剩余的位

/// <summary>
        /// 递归方式生成全排列的方法
        /// </summary>
        /// <param name="fromIndex">全排列的起始位置</param>
        /// <param name="endIndex">全排列的终止位置</param>
        private static void PermutationList(int fromIndex, int endIndex)
        {
            if (fromIndex == endIndex)
                Output();
            else
            {
                for (int index = fromIndex; index <= endIndex; ++index)
                {
                    // 此处排序主要是为了生成字典序全排列,否则递归会打乱字典序
                    Sort(fromIndex, endIndex);
                    Swap(fromIndex, index);
                    PermutationList(fromIndex + 1, endIndex);
                    Swap(fromIndex, index);
                }
            }
        }

非递归方法(字典序法)

おすすめ

転載: blog.csdn.net/weixin_44576259/article/details/120654974