子集生成之递归算法

输出,某个集合的全部子集;

递归实现,算法思想和全排列差不多,主要差别就在于去判断一下某个元素是否可取;

如果不明白请查看本博主的递归算法之全排列算法

#include <cstdio> #include <algorithm> using namespace std; void ziji(int n,int *B,int cur) { if(cur==n+1) { for(int i=1;i<=n;i++) { if(B[i])printf("%d ",i); } printf("\n"); return ; } B[cur]=1; ziji(n,B,cur+1); B[cur]=0; ziji(n,B,cur+1); } int main() { int n,b[1005]; scanf("%d",&n); ziji(n,b,1); return 0; }

输出某个排序是字典序全排列的第几个排列

STL

#include<bits/stdc++.h> using namespace std; int main() { char s[10]; while(cin>>s) { int n=strlen(s); char s1[10]; scanf("%s",s1); sort(s,s+n); int k=0; do { k++; if(strcmp(s,s1)==0) printf("%d\n",k); }while(next_permutation(s,s+n)); } return 0; }

    原文作者:递归算法
    原文地址: https://blog.csdn.net/AX1145/article/details/76993204
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞