首页 > 其他分享 >排列型枚举(全排列)

排列型枚举(全排列)

时间:2024-04-09 09:23:42浏览次数:24  
标签:排列 20 int getStr chosen 枚举

0.简介

在排列型枚举中,我们从给定的元素集合中选择出若干个元素的所有可能排列,这些排列考虑了元素的顺序.

1.代码模板

#include<bits/stdc++.h>
using namespace std;
int n;
int order[20];
bool chosen[20];

// x代表当前选择位 
void DFS(int x) {
	// 选满了
	if (x == n + 1) {
		for(int i = 1; i <= n; i++) {
			cout << order[i] << " ";
		}
		cout << endl;
		return; 
	}

	for(int i = 1; i <= n; i++) {
		if(chosen[i]) continue;
		else {
			// 选中当前的数, 进入下一层搜索 
			chosen[i] = true;
			order[x] = i;
			DFS(x + 1);
			// 不选中,进入下一次循环, 还在当前层 
			chosen[i] = false;
			order[x] = 0;
		}
	}

}
int main() {
	cin >> n;
	DFS(1);
	return 0;
}

2.使用next_permutation

总是向着更大的字典序方向

#include<bits/stdc++.h>
using namespace std;
int n;
int order[20];
bool chosen[20];

string getStr(int n) {
	stringstream ss;
	for(int i = 1; i <= n; i++) {
		ss << i;
	}
	return ss.str();
}
int main() {
	cin >> n;
	string s = getStr(n);
	do {
		cout << s << '\n';
	} while(std::next_permutation(s.begin(), s.end()));
	return 0;
}

标签:排列,20,int,getStr,chosen,枚举
From: https://www.cnblogs.com/trmbh12/p/18123080

相关文章

  • 【C语言】:枚举和联合体
    这里写自定义目录标题1、枚举1.1枚举类型的声明1.2枚举类型的优点1.3枚举类型的使用2、联合体(共用体)2.1联合体类型的声明2.2联合体的特点2.3联合体大小的计算1、枚举1.1枚举类型的声明枚举顾名思义就是⼀⼀列举,把可能的取值⼀⼀列举。⼀周的星期⼀到星期⽇......
  • 小红不想做莫比乌斯反演杜教筛求因子和的前缀和(枚举)--牛客周赛 Round 39-E
    #include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'#defineinf1e18constintmod=1e9+7;constintN=2e5+5;intn,m,p,x;voidsolve(){ cin>>n>>m>>p>>x; intans=0; for(inti=1;i&......
  • 接口和枚举在方法中的区别
    枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被final、public、static......
  • swagger文档枚举类型描述
    背景:问题:使用swagger作为api文档,但文档中的枚举类型仅显示枚举name,对于使用文档的人员来讲不容易理解解决思路:枚举类型加上自定义的描述解决方案maven配置<dependency><groupId>io.swagger.core.v3</groupId><artifactId>swagger-models-j......
  • WPF开发一个可以自适应排列的Panel控件
    一.控件介绍    初看标题可能无法理解,我们看看什么是自适应排列。乍一看它有点像WrapPanel控件,都是从左至右排列,如果一行排列不下就换行继续排列,但是细看你就会发现不对,WrapPanel控件行尾是不会对齐的,也就是说只要WrapPanel的子控件的宽度不一致,每一行的末尾就会必定留下一......
  • [蓝桥杯 2022 国 B] 齿轮(优化枚举)
        根据题目描述,如果采用dfs暴力做法枚举所有方案,肯定会超时,因此我们需要优化枚举,我们都知道在同一组共同转动的齿轮中,线速度相等,因此角速度的比值就是半径的反比,因此我们只需要找到对于每个齿轮作为起始齿轮,只需要找到其倍数半径是否存在即可,而倍数上限就是假设存在......
  • [蓝桥杯 2021 省 B] 杨辉三角形(二分查找+枚举)
        我们之前学过有关杨辉三角的一些性质,我们知道杨辉三角某个数等于左上和右上两个数相加,但是如果我们按照这个性质依次枚举每行每列,就会很容易超时,因此我们可以枚举列,再二分查找行来寻找满足要求的答案,我们可以先将列数到30,基本涵盖了所有的答案,通过组合数性质来二......
  • QT和C++排列组合
    界面比较简洁,如有需要请大家自行完善!!!头文件#pragmaonce#include<QtWidgets/QMainWindow>#include"ui_text.h"classtext:publicQMainWindow{  Q_OBJECTpublic:  text(QWidget*parent=nullptr);  ~text();  voidParseStringToVector(con......
  • C语言自定义类型变量——枚举(enum)
    一.枚举的定义和声明字面意思,枚举就是一一列举,把可能的取值一一列举,在我们现实生活中有许多可以列举的事物,例如:一周七天,一年四季,性别,月份,三原色等等。当我们需要描述这些数据的时候就可以使用枚举了。其关键字为eunm.类似于结构体,联合体,定义一个枚举类型的基本形式如下:enum......
  • 算法学习笔记——暴力求解之枚举
    算法学习笔记——暴力求解之枚举枚举枚举是指对每个可能的解进行逐一判断,直到找到符合题目要求的答案。枚举类的题目本身并不复杂,但在采取枚举策略之前,一定要好好的分析题目的枚举量,枚举量过大的时候,需要选择其他的解决方法。即使问题适合枚举,也要进行分析,以便通过减少部分无效......