子集生成之递归算法
2017-08-09 15:11
106 查看
输出,某个集合的全部子集;
递归实现,算法思想和全排列差不多,主要差别就在于去判断一下某个元素是否可取;
如果不明白请查看本博主的递归算法之全排列算法
输出某个排序是字典序全排列的第几个排列
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;
}
递归实现,算法思想和全排列差不多,主要差别就在于去判断一下某个元素是否可取;
如果不明白请查看本博主的递归算法之全排列算法
#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;
}
相关文章推荐
- 子集生成各算法
- 子集生成算法
- 子集生成算法
- 子集生成
- 生成一个集合的所有子集 Subset
- 运用二进制生成集合的所有子集
- 子集生成
- 算法竞赛入门经典读书笔记(四)7.3子集生成
- 子集生成的两种方法
- 用递归算法返回该元素id下面的所有子集id
- 子集生成+stl全排列
- NOIP模拟赛1 飞盘队(貌似又是USACO上面的题) MR_HE改编 子集生成+中途相遇+dp
- 子集生成(三种办法)
- uva 11205 The Broken Pedometer(经典的子集生成题目,在此总结了三种子集生成的方法~)
- JavaScript生成树形菜单(递归算法)
- ACMjava子集生成的三种方法,增量构造,辅助位向量,二进制法
- 子集生成算法
- 算法:子集生成
- 子集生成
- 快速递归算法遍历生成De Bruijn序列