首页 > 其他分享 >dfs 实现排列型、组合型、指数型枚举

dfs 实现排列型、组合型、指数型枚举

时间:2022-11-20 23:03:45浏览次数:52  
标签:组合型 int length step dfs return 枚举 path


1、排列型枚举

dfs 实现排列型、组合型、指数型枚举_c++

大家喜闻乐见,经常写的全排列。不做赘述。

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

int n;
int path[20];
bool vis[20];

void dfs(int step){
if(step == n + 1){
for(int i = 1; i <= n; i ++) cout << path[i] << " ";
cout << endl;
return;
}

for(int i = 1; i <= n; i ++){
if(!vis[i]){
vis[i] = 1;
path[step] = i;
dfs(step + 1);
path[step] = 0;
vis[i] = 0;
}
}
}

void solve(){
cin >> n;
dfs(1);
}

int main(){

solve();

return 0;
}















2、组合型枚举

dfs 实现排列型、组合型、指数型枚举_c++_02


这里相较于全排列,大家估计甚少写过了。变化了不止一点。

1.有了长度的限制

2.递增性

dfs 实现排列型、组合型、指数型枚举_#include_03

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

int n, length;
int path[26];

void dfs(int step, int start){
if(step == length + 1){
for(int i = 1; i <= length; i ++) cout << path[i] << " ";
cout << endl;
return;
}

for(int i = start; i <= n; i ++){
path[step] = i;
dfs(step + 1, i + 1);// i + 1 ? 当前用了数x,下一个必须从数x + 1开始填 //保证递增性
path[step] = 0;
}
}

void solve(){
cin >> n >> length;
dfs(1, 1);
}

int main(){
solve();

return 0;
}















3、指数型枚举

dfs 实现排列型、组合型、指数型枚举_c++_04


这个地方有个小坑,就是这个空行。可以直接单独输出一行空行也行。或者从0---n递归也有一行空行(一般从1---n递归)

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

int n;
int path[26];

void dfs(int step, int start, int length){
if(step == length + 1){
for(int i = 1; i <= length; i ++) cout << path[i] << " ";
cout << endl;
return;
}

for(int i = start; i <= n; i ++){
path[step] = i;
dfs(step + 1, i + 1, length); //这里变化又多了一个限制
path[step] = 0;
}
}

void solve(){
cin >> n;
for(int i = 0; i <= n; i ++){//妙在这里的变化,长度的变化,递增的变化。 //0开始只是为了过题
dfs(1, 1, i);
}

}

int main(){
solve();

return 0;
}








标签:组合型,int,length,step,dfs,return,枚举,path
From: https://blog.51cto.com/u_15389271/5872094

相关文章

  • 标志枚举的使用
    标志枚举的使用大多是在标记多重状态,比如说文件的属性:只读,可写,隐藏,系统文件等相关属性,都对应相应的标志位,如果在C#中想实现自己的标志枚举,也是可以的,下文是亲身试验的一段代......
  • HDFS操作方法
    利用Shell命令与HDFS进行交互Hadoop支持很多Shell命令,其中fs是HDFS最常用的命令,利用fs可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。下文示例命令是以"......
  • 三门问题暴力枚举~~~
    First——什么是三门问题三门问题(MontyHallproblem)亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论,大致出自美国的电视游戏节目Let’sMakeaDeal。问题名字来自该节目......
  • 重学c#系列——枚举[二十三]
    前言该系列继续更新,枚举介绍。正文首先呢,枚举是值类型,这个没什么好说的。enumConnectionState{ DisConnected, Connecting, Connected, DisConnecting}如果......
  • 第2-3-7章 个人网盘服务接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七
    目录5.8导入其他接口代码5.8.1接口导入-分页查询附件5.8.2接口导入-根据业务类型/业务id查询附件5.9导入网盘服务接口5.9.1导入FileController5.9.2导入StatisticsCo......
  • T292112 [传智杯 #5 练习赛] 时钟 ----- 模拟、枚举
    你有一个电子钟,可以显示 0:00 到 23:59 之间的所有时间,以数字的形式显示。其中小时是 0 到 23(0时会显示一个0,而1到9时不会显示前导0),分钟是 00 到 59(0到......
  • fsdfsfsd
    aslfjoasjcss设置文字水平垂直居中的方法:1、给文字元素添加“{align-items:center}”样式使其水平方向居中;2、给文字元素添加“{justify-content:center}”......
  • Hadoop总结——HDFS
    一、HDFS概述1.1HDFS产生背景随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理......
  • 1759E(方案枚举)
    题目链接题目大意:给你n个数(n个宇航员对应的能量值)一个h,h表示机器人当前的能量值。机器人拥有2中绿色的药剂,一瓶蓝色的药剂。其中绿色的药剂可以使机器人的能量值变为......
  • 第2-3-6章 打包批量下载附件的接口开发-文件存储服务系统-nginx/fastDFS/minio/阿里云
    目录5.6接口开发-根据文件id打包下载附件5.6.1接口文档5.6.2代码实现5.6.3接口测试5.7接口开发-根据业务类型/业务id打包下载5.7.1接口文档5.7.2代码实现5.7.3接口......