全排列——递归方法
来源:互联网 发布:专业美工软件 编辑:程序博客网 时间:2024/06/05 03:08
与网络上大多数方法相比,该方法可以处理
[1 1 1]重复生成的问题 -》c采用set
#include <iostream>#include <vector>#include <set>using namespace std;int n = 0;vector<string> con;set<string> res;void resprint() { for (set<string>::iterator it = res.begin(); it != res.end(); it++) cout << "[ " << *it << "]\n"; cout <<"全排列组合数:" <<res.size() <<endl; res.clear(); return ;}void swap(int &a, int &b){ /* 函数名:swap(int &a,int &b); 函数作业:传值:对a,b进行交换。 */ int m = a; a = b; b = m;}void perm(vector<string> list, int k, int m){ /* 函数名:perm(vetcor<int> list,int k , int m ); 传入参数:将要被排列的数组list,当前下标k,m为当前排列数组的长度。 核心思想: 递归公式: 递归点:当下标指到最后一位时:输出当前的list。 */ if (k == m)//k如果已经到达最后一位就输出当前的list; { string temp = ""; for (int i = 0; i <= m; i++) { temp += list[i] + " "; } res.insert(temp); return; } for (int i = k; i <= m; i++) { swap(list[k], list[i]);//将当前数组的首位一次与后面的元素交换位置。 perm(list, k + 1, m); //进行递归。 swap(list[k], list[i]);//需要换回来 每次都是基于当前最初的数组。 }}int main(){ string length; while (1) { cout << "请您输入序列的个数(不要超过100000000):(输入q退出)" << endl; cin >> length; if (length[0] == 'q' && length.size() == 1) { cout << "感谢您的使用!" << endl; break; } int i = 0; while ( '0' <= length[i] && length[i] <= '9') i++; if (i == (length.size() )) { n = atoi( length.c_str() ); if (n > 100000000) cout << "对不起,您输入的数字太大。\n请您重新输入:" << endl; else if (n == 0) cout << "对不起,您输入的数字为负数。\n请您重新输入:" << endl; else { cout << "您输入序列的元素个数为: " << n << endl; for (int i = 0; i < n; ++i) { string temp; cin >> temp; con.push_back(temp); } printf("您输入的序列为:[ "); for (int i = 0; i < n; ++i) { cout << con[i] << " " ; } printf("]\n下面输出该序列的全排列:\n"); perm(con, 0, n - 1); resprint(); printf("\n"); } } else cout << "请输入大于0的数字" << endl; con.clear(); } return 0;}
阅读全文
0 0
- 全排列——递归方法
- 全排列—递归
- 全排列递归方法
- 全排列问题——浅谈递归
- 算法——全排列递归实现
- 递归算法——全排列
- 全排列——递归算法
- 递归——单词全排列
- 全排列——递归实现
- 全排列的递归实现方法
- 用递归的方法实现全排列
- 用递归的方法实现全排列
- 全排列(递归方法,模板实现)
- 递归的方法进行全排列
- 全排列 递归方法的步骤分析
- 全排列 递归方法与非递归方法实现
- 数组全排列算法(二)整型数组全排列——递归算法
- 全排列(非递归和递归的方法)
- 通过position:absolute top right 设置到父类右边不起作用
- Scrapy学习笔记(2)---Spider
- redis之安装运行(1)
- 一文学会用 Tensorflow 搭建神经网
- Java并发编程:深入剖析ThreadLoca
- 全排列——递归方法
- osg之矩阵(二)
- Python库打包到PyPI
- 哈哈
- 字母间的转化
- Ununtu安装后无法完成引导 (无法选择对应系统)
- Fedora 25下IDEA运行JavaFX出现Gtk-WARNING的解决办法
- ElasticSearch的简单介绍
- VBA代码排版工具