求全排列

来源:互联网 发布:淘宝图片护盾怎么设置 编辑:程序博客网 时间:2024/05/23 00:07


问题: 检查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}


注意的是,交换完后,排列要恢复成原始状态。交换和恢复的次数相同可以保障原始状态


0 0