排列组合算法(递归实现)
程序员文章站
2022-05-21 23:18:25
...
全排列(三种实现):
#include<iostream>
#include<algorithm>
using namespace std;
/**
* 全排列递归实现
* @param deep 遍历深度
*/
const int perm_end = 10;
int array[] = {1,2,3,4,5,6,7,8,9,10};
int cnt = 0;
void perm_1(int deep) {
// 递归结束,打印
if(deep == perm_end) {
cnt++;
return ;
}
// 递归遍历
for(int i=deep; i < perm_end; i++) {
{int temp = array[i]; array[i]=array[deep]; array[deep]=temp;}
perm_1(deep+1);
{int temp = array[i]; array[i]=array[deep]; array[deep]=temp;}
}
}
bool is_used[perm_end];
int results[perm_end];
void perm_2(int deep) {
// 递归结束,打印
if (deep == perm_end) {
cnt++;
return ;
}
// 递归遍历
for (int i = 0; i < perm_end; i++) {
if (!is_used[i]) {
is_used[i] = true;
results[deep] = array[i];
perm_2(deep+1);
is_used[i] = false;
}
}
}
int main()
{
perm_1(0);
perm_2(0);
do {
cnt++;
} while(next_permutation(array,array+perm_end));
cout << cnt << endl;
return 0;
}
组合:
#include <iostream>
using namespace std;
// 组合数个数
const int M = 2;
// 结果集
int results[M];
// 结果数量
int count = 0;
// 当comb_end == n时结束递归
int comb_end = 0;
// 初始化数组
int array[] = {1,2,3};
// 数组的长度
const int L = 3;
/**
* 求组合递归实现
* @param deep 递归深度
* @param n 本次递归长度
* comb_end 数组有效数据下标
*/
void comb(int deep, int n) {
// 越界递归结束
if(deep > L) {
return ;
}
// 递归结束,打印
if(comb_end == n) {
for(int i=0; i < n; i++) {
cout << results[i] << " ";
}
cout << endl;
count++;
return ;
}
// 递归遍历
results[comb_end++] = array[deep];
comb(deep+1, n);
comb_end--;
comb(deep+1, n);
}
int main() {
comb(0,M);
cout << count << endl;
return 0;
}
上一篇: PHP实现排列组合算法
下一篇: c语言排列组合算法
推荐阅读
-
PHP实现冒泡算法
-
php实现rc4加密算法_PHP教程
-
Python实现的递归神经网络简单示例
-
编写一个函数 reverse_string(char * string)(递归实现) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
-
编写一个函数reverse_string(char * string)(递归实现)实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数
-
php加密算法之实现可逆加密算法和解密分享
-
JS实现电话号码的字母组合算法示例
-
数据结构(C实现)------- 最小生成树之Prim算法
-
Python用户推荐系统曼哈顿算法实现完整代码
-
PHP中简单实现数学组合算法