问题: 检查n 个不同元素的所有排列方式
思路:
使用递归求解:
基部: 当下标为n-1的时候,整个元素已经遍历完成,此时的排列具有唯一性
递归: 若K< n-1, 那么当前下标为k的元素和后面的元素都要交换一次。
代码:
template<class T>
void Perm(T list[], int k, int m)
{
int i;
if (k == m)
{
for (i = 0; i <= m; i++)
cout << list[i];
cout << endl;
}
else
{
for (i = k; i <= m; i++)
{
//[k]和[k:m]之间的元素逐个交换
Swap(list[k], list[i]);
Perm(list, k+1, m);
//恢复原始的排列顺序,方便下一次的排列
Swap(list[k], list[i]);
}
}//end else
}
注意的是,交换完后,排列要恢复成原始状态。交换和恢复的次数相同可以保障原始状态