题目描述
blablabla
样例
blablabla
算法1
简单深搜
对于几个点
1.这个题要求输出全空情况
2.这个题要求输出不同长度的情况
3.这个题要求升序
4.这个题可以非1开头,所以不能单用bool
解决方案
1.开始就给个全空
2.在搜索函数中提供一个长度参数,用长度参数来控制第几个数,
3.提供一个升序参数,即在后面循环填进去的参数必须要大于这个升序参数,在传参时以我们目前填入的合法数为新的升序参数
4.设置一个数组用来存储数字
C++ 代码
#include<bits/stdc++.h>
using namespace std;
int n;
int aa[16];
bool nmsl[16];
void mj(int a,int b,int c){
if(b==a+1){
for(int i=1;i<=a;i++){
cout<<aa[i]<<" ";
}
cout<<endl;
return ;
}
for(int i=c;i<=n;i++){
if(!nmsl[i]){
nmsl[i]=1;aa[b]=i;
mj(a,b+1,i+1);
nmsl[i]=0;
}
}
}
int main(){
cin>>n;
cout<<endl;
for(int i=1;i<=n;i++)
mj(i,1,1);
return 0;
}
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla