题目略,解题思路:
对于每一位上的数字,我们有两种选择,第一种选这个数字,第二种不选这个数字;
当我们选这个数字时候就把这个数字标记成1,如果不选就标记成2。
递归就可以了,不太了解递归的花可以百度搜一下(没学过数据结构的伙伴可以去了解一下栈和递归),对于本题来说其实就是一种递归搜索树,也可以看成二叉树的先序遍历的变形,也可以理解为dfs,本质来说都是递归,递归时要注意回复原来的状态,即回溯,不废话了,看代码吧。
大佬直接无视上面废话。
样例参考题目
给出c++代码:
include[HTML_REMOVED]
using namespace std;
int n;
int a[20];
int st[20];
void dfs(int u){
if(u==n) {
for(int i=0;i<n;i++){
if(st[i]==1){
cout<<i+1<<” “;
}
}
cout<<endl;
return ;
}
st[u]=2;
dfs(u+1);
st[u]=0;
st[u]=1;
dfs(u+1);
st[u]=0;
}
int main(){
cin>>n;
dfs(0);
return 0;
}
```
我感觉写的好难看啊,,看来还是不懂与y总的要求0.0
给你私信了一份题解的样例写法,可以参考一下~
收到收到 over