递归函数生成全排列
来源:互联网 发布:淘宝消费 信用卡积分 编辑:程序博客网 时间:2024/05/28 23:23
检查n个不同元素的所有排列方式来确定一个最佳的排序。比如a,b,c的排列方式有<<abc,acb,bac,bca,cab,cba>>这六种。
用c++非递归函数实现比较难,用递归实现还是ok的其核心思想是:将每个元素放到n个元素组成的队列最前方,然后对剩余元素进行全排列,依次递归下去。
比如:
a b c
首先将a放到最前方(跟第一个元素交换),然后排列b c, 然后将a放回本来位置
结果 a b c; a c b
其次将b放到最前方(跟第一个元素交换),然后排列a c,然后将b放回
结果 b a c; b c a
。。。
如果是4个元素,就将元素依次放到第一个元素的位置,后面的排序类似前面的3元素排列
#include <iostream>using namespace std;/** 函数模板,递归调用对一个数组进行全排列*/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 //list[k:m]有多个排列方式//递归的产生这些排列方式for (i = k; i <= m; i++){swap(list[k], list[i]);//交换位置,a开始与第一个交换位置Perm(list, k + 1, m);//下一步就是a后面的与a后面后面的交换位置,知道只有一个数时,就打印swap(list[k], list[i]);//从后往前交换,将位置还回去,对下一次排列负责}}//一个测试程序int main(){char list[] = "abc";Perm(list, 0, 2);system("pause");return 0;}
0 0
- 递归函数生成全排列
- 递归生成全排列
- 递归函数生成排列
- 递归函数生成排列
- 全排列生成 (递归+非递归)
- 递归生成全排列(常规)
- 递归解决全排列生成算法
- 递归生成集合的全排列
- 全排列生成算法(非递归)
- 递归解决全排列生成算法
- 递归解决全排列生成算法
- 递归解决全排列生成算法
- Num 33 : 函数递归 [ 全排列 ]
- 【C++】Perm递归全排列函数分析
- 使用next_permutation函数生成全排列
- 生成全排列的c++函数
- next_permutation函数(全排列生成利器)
- 简单探讨全排列的递归生成算法
- 网络营销
- gzngxg df g
- 数组的初始化(不适用于C++)
- Aexi(2)
- 四点判断能否围成矩形
- 递归函数生成全排列
- C# ignoring letter case for if statement(Stackoverflow)
- HDU - 1285 确定比赛名次
- POJ The Suspects
- tolower (Function)
- leetcode Palindrome Number
- OSGI 环境下的 AOP 日志记录 DEMO 制作过程
- HDU - 1710 Binary Tree Traversals
- 无题