递归的三种选数

/*
指数型枚举(每个数有选和不选两种情况)
 
#include<bits/stdc++.h>
using namespace std;
const int N=20;
int n;
int st[N];//记录每个数的状态,0还没有考虑,1表示选这个数,2表示不选这个数
void dfs(int x){//x表示枚举到了哪个位置
    if(x>n){
        for(int i=1;i<=n;i++){
            if(st[i]==1){
                printf("%d ",i);
            }
        }
        printf("\n");
        return ;
    }
    //不选
    st[x]=2;
    dfs(x+1);
    st[x]=0;//回溯因为从一个点到他的一个分支可以视为下一个点选
    //或不选,你要到另一个分支去你就要先回到初始状态
    //选
    st[x]=1;
    dfs(x+1);
    st[x]=0;
}
int main(){
    scanf("%d",&n);
    dfs(1);
    return 0;
}*/
/*
全排列

#include<bits/stdc++.h>
using namespace std;
const int N=10;
int n;
bool st[N];//用来表示选没选
int arr[N];//用来存答案
void dfs(int x){
    if(x>n){
        for(int i=1;i<=n;i++){
            printf("%5d",arr[i]);//五个场宽
        }
        printf("\n");
        return ;
    }
    for(int i=1;i<=n;i++){
        if(!st[i]){
            st[i]=true;
            arr[x]=i;
            dfs(x+1);
            st[i]=false;
            arr[x]=0;
        }
    }
}
int main(){
    scanf("%d",&n);
    dfs(1);
    return 0;
}*/
/*
组合123 124
后面比前面大
*/
#include<bits/stdc++.h>
using namespace std;
const int N=21;
int n,r;
int arr[N];
void dfs(int x,int start){
    if(x>r){
        for(int i=1;i<=r;i++){
            printf("%3d",arr[i]);
        }
        printf("\n");
        return;
    }
    for(int i=start;i<=n;i++){
        arr[x]=i;//比如说你有多个分支那就会进入很多这个for循环所以要传i而不是start
        dfs(x+1,i+1);
        arr[x]=0;
    }
}
int main(){
      scanf("%d %d",&n,&r);
      dfs(1,1);
    return 0;
}

相关推荐

  1. 2024-03-31 16:56:03       37 阅读
  2. ---

    2024-03-31 16:56:03       54 阅读
  3. 使用,手写实现 flat 方法,两方法

    2024-03-31 16:56:03       32 阅读
  4. 二叉树遍历方式非

    2024-03-31 16:56:03       35 阅读
  5. leetcode中二叉树遍历中遍历方式实现

    2024-03-31 16:56:03       51 阅读
  6. 解决问题方法

    2024-03-31 16:56:03       67 阅读
  7. Ruby目录文件又一方法

    2024-03-31 16:56:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 16:56:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 16:56:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 16:56:03       82 阅读
  4. Python语言-面向对象

    2024-03-31 16:56:03       91 阅读

热门阅读

  1. ReentrantLock

    2024-03-31 16:56:03       40 阅读
  2. 图的应用之关键路径

    2024-03-31 16:56:03       39 阅读
  3. 位运算

    位运算

    2024-03-31 16:56:03      36 阅读
  4. 物联网如何改善农业生产和作物管理

    2024-03-31 16:56:03       41 阅读
  5. 算法3&4_数据结构&数组和链表

    2024-03-31 16:56:03       37 阅读
  6. 15.三数之和

    2024-03-31 16:56:03       41 阅读
  7. 【Golang】switch 语句和select 语句有什么区别?

    2024-03-31 16:56:03       35 阅读