包含重复元素的全排列
来源:互联网 发布:钢铁的咆哮3战舰数据 编辑:程序博客网 时间:2024/05/21 19:36
#include<iostream>#include<fstream>#include<algorithm>using namespace std;int n = 0;//统计全排列个数ofstream out("output.txt");// 交换 template<class Type>void Swap(Type &a, Type &b){Type temp = a;a = b;b = temp;}// 判断是否是重复元素交换template<class Type>bool isSwap(Type list[], int k, int m){for (int i = k; i < m; i++)if (list[i] == list[m])return false;return true;}//全排列,每次只取一个出来,Perm(r1)表示Perm中不含r1,并且由r1开头。 template<class Type>void Perm(Type list[], int k, int m){ // 产生list[k:m]的所有排列 if (k == m){ // 只剩下一个元素 for (int i = 0; i <= m; i++){out << list[i];}out << endl;n++;}else{ // 还有多个元素待排列,递归产生排列 for (int i = k; i <= m; i++){if (isSwap(list, k, i)){ // 判断是否为重复元素交换Swap(list[k], list[i]);Perm(list, k + 1, m);Swap(list[k], list[i]);}}}}int main(){ifstream in("input.txt");if (!in){cout << "In Error!" << endl;exit(-1);}if (!out){cout << "Out Error!" << endl;exit(-1);}int l;in >> l;char* a = new char[l];in.get();for (int i = 0; i < l; i++){in >> a[i];}Perm(a, 0, l - 1);out << n << endl;in.close();out.close();system("pause");return 0;}
实验结果
1 0
- 包含重复元素的全排列
- 输出一组元素的全排列(可包含重复元素)
- 集合的全排列(可包含重复元素)
- 包含重复的全排列
- Subsets II 全排列包含重复的
- 重复元素全排列
- 全排列算法:不含重复元素,包含重复元素,字母序排列
- java 数组全排列(可包含重复元素)
- 递归实现全排列(可包含重复元素)
- 有重复元素的全排列
- 含重复元素的全排列
- 有重复元素的全排列
- 含重复元素序列的全排列
- 有重复元素的全排列问题
- 含有重复元素的全排列
- 有重复元素的全排列问题
- 含重复元素的全排列
- 有重复元素的全排列问题
- TextView
- 1.3.3、开发板刷系统:破坏原有的bootloader从SD2的bootloader启动
- 强悍!winrar妙用-将bat脚本打包成exe可执行文件并实现自动执行
- 随记
- ActiveMQ和spring整合
- 包含重复元素的全排列
- day15(11.21)笔记
- 爬虫学习笔记二、 python3.4连接mysql数据库
- 第12周OJ实践 利用参数宏进行角度与弧度转换
- bzoj 4520: [Cqoi2016]K远点对 KDtree
- javaScript深度解析(1)--作用域
- 1001.高精度乘法的处理方法
- Activity not started, its current task has been brought to the front
- 贝叶斯学习 -- matlab、python代码分析(3)