排列组合是大家都接触过的概念,而组合型枚举则是在 n 个元素中随机选出 m 个元素的问题。对于每一种可能的选择方案,我们需要确定选择了哪 m 个元素,这就是组合型枚举。具体而言,组合型枚举解决的是 C(n,m)问题,即从n个元素中选取m个元素的组合数量。
对于该算法其实是有固定的模板的,如下。
递归实现:
import java.util.Scanner; public class Main { static int n,m; static int[] v=new int[20]; static int[] num=new int[20]; public static void main(String[] args) { Scanner scanner=new Scanner(System.in); n=scanner.nextInt(); m=scanner.nextInt(); dfs(1,0); } public static void dfs(int pos,int pre){ //参数一表示当前已经选数的个数 //参数二表示上一个选取的数 if(pos>m){ for(int i=1;i<=m;i++){ System.out.print(num[i]+" "); } System.out.println(); return; } for(int i=1;i<=n;i++){ if