当前位置: 首页 > backend >正文

用递归实现各种排列

为了满足字典序的输出,我采用了逐位递归的方法(每一位的所能取到的最小值都大于前一位)

1,指数型排列

#include<bits/stdc++.h>
using ll = long long int;
using namespace std;
int a[10];void printp(int m) {for (int h = 0; h <= m; h++) {if (h) cout << " ";cout << a[h];}cout << endl;return;
}void go(int i, int min, int n) {if (min > n) return;for (int k = min; k <= n; k++) {a[i] = k;printp(i);go(i + 1, k + 1, n);}return;
}int main() {int n;cin >> n;go(0, 1, n);return 0;
}

2,组合型枚举

#include<bits/stdc++.h>
using ll=long long int;
using namespace std;
int a[10];void printp(int m){for(int i=0;i<m;i++){if(i) cout<<" ";cout<<a[i];}cout<<endl;return;
}void go(int i,int min,int n,int m){if(i==m) printp(m);for(int k=min;k<=n;k++){//&&n-k>=m-1-ia[i]=k;go(i+1,k+1,n,m);}return;
}int main(){int n,m;cin>>n>>m;go(0,1,n,m);return 0;
}

 注释的部分是递归的剪枝操作,避免过早取到太大的值导致后面的值无法取,加上剪枝还是能省不少时间的

3,排列型枚举

#include<bits/stdc++.h>
using ll=long long int;
using namespace std;
int a[10],vis[10]={0};void printp(int n){for(int i=0;i<n;i++){if(i) cout<<" ";cout<<a[i];}cout<<endl;
}void go(int i,int n){if(i==n) printp(n);for(int k=1;k<=n;k++){if(vis[k]) continue;a[i]=k;vis[k]=1;go(i+1,n);vis[k]=0;}
}int main(){int n;cin>>n;go(0,n);return 0;
}

这个枚举与前两个不同,因为是排列的枚举,所以不要求字典序输出,因此问题转换成了如何避免重复,所以我专门开了一个状态数组来记录这个数位上要取的值是否已经被取过了

http://www.xdnf.cn/news/4771.html

相关文章:

  • 使用Jmeter进行核心API压力测试
  • 如何进行APP安全加固
  • 计算机视觉与深度学习 | 基于Transformer的低照度图像增强技术
  • 用react实现一个简单的三页应用
  • nut-form表单:实现动态新增、校验
  • android ViewModel liveData无法监听之多线程下activityViewModels不安全
  • ISP gamma校正简介
  • 如何对外包团队进行有效的管理?
  • JAVA房屋租售管理系统房屋出租出售平台房屋销售房屋租赁房屋交易信息管理源码
  • 总线通信篇:I2C、SPI、CAN 的底层结构与多机通信设计
  • Python核心数据结构深度对比:列表、字典、元组与集合的异同与应用场景
  • 浏览器刷新结束页面事件,调结束事件的接口(vue)
  • 谷歌 Gemma 大模型安装步骤
  • oracle goldengate非并行进程转换为并行进程
  • Python3正则表达式:字符串魔法师的指南[特殊字符]‍♂️
  • 【C语言】--指针超详解(二)
  • 非对称加密:为什么RSA让“公开传密”成为可能
  • 计算机科技笔记: 容错计算机设计01 概述 教材书籍 课程安排 发展历史
  • Python连接云端服务器:基于Paramiko库的实践与问题剖析
  • LeetCode 3341.到达最后一个房间的最少时间 I:Dijkstra算法(类似深搜)-简短清晰的话描述
  • 9. 从《蜀道难》学CSS基础:三种选择器的实战解析
  • 密码学--RSA
  • 【AI提示词】费曼学习法导师
  • 缓存套餐-01.Spring Cache介绍和常用注解
  • LeetCode 3341到达最后一个房间的最少时间 I 题解
  • 基于大模型的计划性剖宫产全流程预测与方案优化研究报告
  • 跨浏览器自动化测试的智能生成方法
  • rom定制系列------红米note12 5G版miui14修改型号root版 原生安卓14批量线刷固件 原生安卓15等
  • STM32 ADC
  • 可撤销并查集,原理分析,题目练习