输出,某个集合的全部子集;
递归实现,算法思想和全排列差不多,主要差别就在于去判断一下某个元素是否可取;
如果不明白请查看本博主的递归算法之全排列算法
#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; }