全排列算法(递归实现) 组合算法(递归,位运算实现)
来源:互联网 发布:淘宝网中老年人女装 编辑:程序博客网 时间:2024/06/03 18:10
//……………………………..全排列…………………….
#include<iostream>using namespace std;//判断要交换的两个数是否相等,如果相等就不进行交换bool IsSwap(int list[],int begin,int end){ for(int i = begin;i<end;i++) if(list[i] == list[end]) return false; return true;}void Perm(int list[],int k,int m){ if(k == m) { for(int i =0;i<m;i++) cout<<list[i]; cout<<endl; } else { for(int i = k;i<m;i++) { if(IsSwap(list,k,i)) { swap(list[k],list[i]); Perm(list,k+1,m); //递归计算k+1到m的全排列 swap(list[k],list[i]); } } }}int main(){ int arr[] = {1,2,2}; cout<<"arr数组全排列的结果是:"<<endl; Perm(arr,0,3); return 0;}
//………………………………….组合算法………………………………
//………………………1.递归方式实现
/*
解题思路:因为要求集合里的元素所能够组成的所有组合,所以我们需要遍历该集合,
这里假设我们的集合为”abc”,从头扫描集合里的元素,第一个元素为a,对于这个元素,
有两种选择,一种是将字符放到组合中,然后在剩下的n-1个字符中选取m-1个字符
另一种是不把字符放到组合中去,接下来需要在剩下的n-1个字符中选取m个字符
*/
#if 1void Combination(char* string,int number,vector<char>& result){ if(number == 0) { vector<char>::iterator iter = result.begin(); for(;iter<result.end();++iter) cout<<*iter; cout<<endl; return ; } if(*string == '\0') return ; result.push_back(*string); Combination(string+1,number-1,result); //将字符放到组合当中 result.pop_back(); Combination(string+1,number,result); //不把字符放到组合当中}void Combination(char* string){ if(string == NULL) return ; int length = strlen(string); vector<char>result; for(int i = 1;i<=length;++i) { Combination(string,i,result); }}int main(){ char* string = "abcd"; Combination(string); return 0;}#endif
//………………………..2.位运算…………..
分析组合规律可以发现,
当集合个数为2时,有3(2^2-1)种组合方式;
当集合个数为3时,有7(2^3-1)种组合方式;
当集合个数为4时,有15(2^4-1)种组合方式;
又直到1<
#if 1int main(){ string s ; cin>>s; int len = s.size(); int bit = 1<<len; //所有组合种类个数 int t; //两个for循环依次将所有组合情况列举出来 for(int i= 0;i<bit;i++) { for(int j = 0;j<len;j++) { t = 1<<j; if((t&i)!=0) { cout<<s[j]; } } cout<<endl; }}#endif
阅读全文
0 0
- 全排列算法(递归实现) 组合算法(递归,位运算实现)
- 全排列算法递归实现(可重集)
- 全排列算法递归实现(Permutations)
- 递归算法实现全排列
- 全排列算法递归实现
- 【算法】递归实现全排列
- 全排列--递归算法实现
- 递归算法实现全排列
- 递归算法实现全排列
- 全排列递归实现算法
- 全排列算法递归实现(笔试题)
- 全排列(Perm)的递归实现算法
- 全排列算法(递归)
- 全排列算法(递归)
- 算法——全排列递归实现
- 递归实现的全排列算法
- 全排列算法之非递归实现
- 全排列算法的非递归实现
- FastDFS文件分布式文件服务器搭建
- 智能纠错(N-gram、编辑距离、转化拼音)
- 扫描识别控件Dynamic Web TWAIN发布v13.1,改进HTTPUpload方法
- 1808:最长字符串
- app开发中的异步处理(二)
- 全排列算法(递归实现) 组合算法(递归,位运算实现)
- Remove Linked List Elements
- JSON追加5转换
- js 将时间字符串转成秒 (Date.parse()) && 当心默认时区
- Linux内存管理原理
- Devise Gem简介
- Hardwood Species
- Android "渡劫" 之"源码情未了"
- MYSQL语句读取顺序