递归的三种选数

news/2024/7/15 18:03:49 标签: 深度优先, 算法, 图论

/*
指数型枚举(每个数有选和不选两种情况)
 
#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;
}


http://www.niftyadmin.cn/n/5461542.html

相关文章

一篇搞定AVL树+旋转【附图详解旋转思想】

&#x1f389;个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名乐于分享在学习道路上收获的大二在校生 &#x1f648;个人主页&#x1f389;&#xff1a;GOTXX &#x1f43c;个人WeChat&#xff1a;ILXOXVJE &#x1f43c;本文由GOTXX原创&#xff0c;首发CSDN&…

C++ 容器及选用总结 _

第1条&#xff1a;慎重选择容器类型。 标准STL序列容器&#xff1a;vector、string、deque和list。 标准STL关联容器&#xff1a;set、multiset、map和multimap。 非标准序列容器slist和rope。slist是一个单向链表&#xff0c;rope本质上是一“重型”string。 非标准的关联…

《乱弹篇(26)更好的自己》

俄乌、以巴、中东&#xff0c;烽火连天&#xff0c;持久酣战&#xff0c;搅得地球村住民不得安宁。虽说孰是孰非自有公论&#xff0c;但时评文难写也是评论界的普遍认知&#xff0c;所以今天笔者自觉地绕开时政话题&#xff0c;尽本“人民体验官”义务&#xff0c;推广人民日报…

C语言自定义类型结构体详解

C语言中&#xff0c;有内置类型&#xff0c;也就是C语言本身支持的现成的类型&#xff0c;例如int , char, double, float 等&#xff0c;当然&#xff0c;仅有内置类型是不够的&#xff0c;例如&#xff0c;我们想表示一个变量人&#xff0c;但是现有的类型不支持我们表示&…

YOLOv5-小知识记录(四)

0. 写在前面 本篇介绍SPP模块、FPN模块模块&#xff0c;主要也是对YOLOv5的内容的补充&#xff1a; Yolo系列算法-理论部分-YOLOv4-CSDN博客 Yolo系列算法-理论部分-YOLOv5-CSDN博客 上一篇&#xff1a; YOLOv5-小知识记录(三)-CSDN博客 1. PANet&#xff08;Path A…

网络基础(二)——HTTP协议

目录 1、2个简单的预备知识 2、HTTP请求和响应的格式 3、实现一个最简单的httpserver 4、HTTP的细节字段 4.1、GET和POST 4.2、HTTP的状态码 4.3、HTTP常见Header 1、2个简单的预备知识 首先我们来看一个域名&#xff1a;http://www.baidu.com/&#xff0c;很明显这是百…

Express学习

版权声明 本文章由B站上的黑马课程整理所得&#xff0c;仅供个人学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;本人致力于维护原创作品的权益&#xff0c;共同营造一个尊重知识产权的良好环境…

【复习linux相关命令】

查看命令位置&#xff0c;查找命令 which命令 查看命令的位置 [rootVM-12-15-opencloudos ~]# which cd /usr/bin/cd [rootVM-12-15-opencloudos ~]# which java /usr/local/java/jdk1.8.0_261/bin/java [rootVM-12-15-opencloudos ~]# which pwd /usr/bin/pwdfind查找文件 …