您的位置:首页 > 其它

子集生成之递归算法

2017-08-09 15:11 106 查看
输出,某个集合的全部子集;

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

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

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: