堆生成算法用于生成n个对象的所有组合。其思想是通过选择一对要交换的元素,在不干扰其他n-2元素的情况下,从先前的组合生成每个组合。
下面是生成n个给定数的所有组合的示例。
示例:
输入:1 2 3
输出:1 2 3
2 1 3
3 1 2
1 3 2
2 3 1
3 2 1
算法生成(n-1)!前n-1个元素的排列,与其中每个元素相邻的最后一个元素。这将生成以最后一个元素结尾的所有置换。
如果n为奇数,则交换第一个和最后一个元素,如果n为偶数,则交换第i个元素(i是从0开始的计数器)和最后一个元素,并重复上述算法,直到i小于n。
在每次迭代中,算法将生成以当前最后一个元素结尾的所有组合。
using System;
using System.Collections;
using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
{
<