组合枚举
例题1
代码实现
参考实现
#include<bits/stdc++.h>
using namespace std;
int n,m;
int path[30];
void dfs(int x,int start){
if(x>m){
for(int i=1;i<=m;i++) cout<<path[i]<<" ";
cout<<"\n";
return;
}
for(int i=start;i<=n;i++){
path[x]=i;
dfs(x+1,i+1);
}
}
int main(){
cin>>n>>m;
dfs(1,1);
return 0;
}
import java.util.*;
public class Main {
static int n,m;
static int[] path=new int[30];
static void dfs(int x,int start){
if(x>m){
for(int i=1;i<=m;i++) System.out.print(path[i]+" ");
System.out.println();
return;
}
for(int i=start;i<=n;i++){
path[x]=i;
dfs(x+1,i+1);
}
}
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
dfs(1,1);
}
}
import sys
input=sys.stdin.readline
n,m=map(int,input().split())
path=[0]*30
def dfs(x,start):
if x>m:
for i in range(1,m+1):
print(path[i],end=" ")
print()
return
for i in range(start,n+1):
path[x]=i
dfs(x+1,i+1)
dfs(1,1)