排列和组合枚举都是暴力基础啦,虽然很简单但是总结一下比较好
组合
先从简单的说起吧,比如说从n个数里选k个
先放代码:
void combination(int cur,int cnt)//cur为当前数,cnt为已选择数的个数
{
if(cnt==k) return ;
for(int i=cur;i<=n;i++)
{
dfs(i+1,cnt+1);
}
}
conbination(1,0);
(这里的n, k, cur, cnt均指序号)
这种思路并不难理解,要保证每一位数前面都没有出现,可以直接从小到大,每一位都枚举上一位后面的数,通过递归就能把所有的组合都枚举出来啦。
排列
最准确的排列算法是通过一步步进化来的
Again,比方说从n个数里选出k个进行排列
最傻白甜的一个写法:
bool check(int i,int n)
{
for(int j=1;j<n;j++)
{
if(a[j]==i) return false;
}
return true;
}
void

本文概述了排列和组合的基本枚举方法,首先介绍了如何从n个数中选择k个进行组合,使用递归确保每一步选择未出现过的数。接着讨论了排列的问题,从最基础的检查重复数字的算法开始,逐步演化到使用计数器避免重复,最后提到了C++中的next_permutation函数,它是实现排列枚举的一个便捷工具。
最低0.47元/天 解锁文章
407

被折叠的 条评论
为什么被折叠?



