排列型枚举底层讲解(两种解法)

简介: 排列型枚举底层讲解(两种解法)

从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案。


输入格式


输入一个整数 nn。


输出格式


每行输出一种方案。


同一行内的数必须升序排列,相邻两个数用恰好 11 个空格隔开。


对于没有选任何数的方案,输出空行。


本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。


数据范围


1≤n≤151≤n≤15


输入样例:


3

输出样例:


3

2

2 3

1

1 3

1 2

1 2 3微信截图_20220413200916.png

常规递归解法

#include<bits/stdc++.h>
using namespace std;
const int max=20;
bool a[20]={0};
int n;
void dfs(int u){
  if(u>n){
    for(int i=1;i<=n;i++){
  if(a[i])cout<<i<<" ";
    }cout<<endl;  
  }
else{
  a[u]=true;
  dfs(u+1);
  a[u]=false;
  dfs(u+1);
} 
}
int main(){
  cin>>n;
  dfs(1);
  return 0;
}

运用全排列函数轻松解决

#include<bits/stdc++.h>
using namespace std;
int n,m;
int main(){
cin>>n;
int a[n];
for(int i=0;i<n;i++){
    a[i]=i+1;
}
do{
for(int i=0;i<n;i++){
    cout<<a[i]<<' ';
}
    cout<<"\n";
}while(next_permutation(a,a+n));
    return 0;
}


微信截图_20220413200916.png微信截图_20220413200916.png

相关文章
92. 递归实现指数型枚举
92. 递归实现指数型枚举
|
6月前
|
算法
枚举算法的介绍
枚举算法的介绍
51 0
|
6月前
递归实现指数型枚举
递归实现指数型枚举
29 0
|
11月前
递归实现排列型枚举
递归实现排列型枚举
|
11月前
|
算法 程序员 C#
C++二分查找算法:132 模式枚举3
C++二分查找算法:132 模式枚举3
|
11月前
|
算法 测试技术 C#
C++二分查找算法:132 模式解法二枚举2
C++二分查找算法:132 模式解法二枚举2
|
11月前
|
算法 测试技术 C#
C++二分查找算法:132模式枚举3简洁版
C++二分查找算法:132模式枚举3简洁版
|
存储 C#
C#视频—浅谈数组与集合的差别
C#视频—浅谈数组与集合的差别
|
人工智能 算法 搜索推荐
9.1 C++ STL 排序、算数与集合
C++ STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了丰富的模板函数和容器,用于处理各种数据结构和算法。在STL中,排序、算数和集合算法是常用的功能,可以帮助我们对数据进行排序、统计、查找以及集合操作等。STL提供的这些算法,能够满足各种数据处理和分析的需求。通过灵活使用这些算法,我们可以高效地对数据进行排序、查找和聚合操作,提高代码的性能和可读性。在实际编程中,根据具体问题的需求选择合适的算法,能够更好地发挥STL的优势,提高程序的效率。
|
算法
组合排序回溯编程题集合(leetcode)
组合排序回溯编程题集合(leetcode)