高效Permutation算法

2014-11-24 02:37:47 · 作者: · 浏览: 1
class FastPermutation
{
public:
	typedef function ENUMERATOR;
	static void Enum(int base, ENUMERATOR enumerator)
	{
		FastPermutation permutation;
		permutation.CalculateAtLevel(base, enumerator);
	}

private:
	void CalculateAtLevel(int level, ENUMERATOR enumerator)
	{
		if (level == 1)
		{
			int sequence[] = { 0 };
			enumerator(sequence);
			return;
		}

		int* sequence = new int[level];
		this->
CalculateAtLevel(level - 1, [level, sequence, enumerator](int* s) { int* key = sequence + (level - 1); *key = level - 1; for (int i = 0; i < level - 1; i++) sequence[i] = s[i]; enumerator(sequence); while (key != sequence) { *key = *(key - 1); *(--key) = level - 1; enumerator(sequence); } }); delete[] sequence; } };