[Day 1] 7.2.2 生成可重集的排列(包括利用STL)
2018-01-11 14:21
190 查看
升天Time.
--------------------------------
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int a[20],p[20],used[20],num[20];
void perm(int d){
if(!d) {
for(int j=n;j>=1;j--)
cout<<a[j];
cout<<endl;
}
for(int i=0;i<n;i++){//不小心将i赋为了全局变量
if(used[p[i]]<num[p[i]]&&(!i||p[i]!=p[i-1])){
//没有在同一层循环调用两个相同的元素
used[p[i]]++;
a[d]=p[i];
perm(d-1);
used[p[i]]=0;
}
}
return ;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i];
num[p[i]]++;
}
sort(p,p+n);
perm(n);
return 0;
}
---------------------------------------------------------------------
STL版
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,p[20];
int main(){
cin>>n;
for(int i=0;i<n;i++)
cin>>p[i];
sort(p,p+n);
do{
for(int i=0;i<n;i++)
cout<<p[i];
cout<<endl;
}
while(next_permutation(p,p+n));
return 0;
}
--------------------------------
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
int a[20],p[20],used[20],num[20];
void perm(int d){
if(!d) {
for(int j=n;j>=1;j--)
cout<<a[j];
cout<<endl;
}
for(int i=0;i<n;i++){//不小心将i赋为了全局变量
if(used[p[i]]<num[p[i]]&&(!i||p[i]!=p[i-1])){
//没有在同一层循环调用两个相同的元素
used[p[i]]++;
a[d]=p[i];
perm(d-1);
used[p[i]]=0;
}
}
return ;
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>p[i];
num[p[i]]++;
}
sort(p,p+n);
perm(n);
return 0;
}
---------------------------------------------------------------------
STL版
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int n,p[20];
int main(){
cin>>n;
for(int i=0;i<n;i++)
cin>>p[i];
sort(p,p+n);
do{
for(int i=0;i<n;i++)
cout<<p[i];
cout<<endl;
}
while(next_permutation(p,p+n));
return 0;
}
相关文章推荐
- 入门经典 第七章 7.2.2 生成可重集的排列
- 组合数学 + STL --- 利用STL生成全排列
- 可重集的排列:投机取巧的做法,利用STL的next_permutation
- 组合数学 + STL --- 利用STL生成全排列
- 7.2.2生成可重集的排列
- POJ 1833:排列 [#使用STL的next_permutation函数生成全排列#]
- 利用css中的border生成三角,兼容包括IE6的主流浏览器
- 生成可重集的排列
- 使用STL的next_permutation函数生成全排列
- STL生成的简单的排列组合数值
- 生成字典序排列(C++ STL) next_permutation函数
- n排列生成与可重集排列
- 生成可重集的排列模板
- 利用css中的border生成三角,兼容包括IE6的主流浏览器
- 怎样利用aps。net动态生成html文件,包括首页?(摘自CSDN)
- 可重集的排列之STL next_permutation 使用
- STL 生成全排列
- c++ STL 生成排列
- 入门经典 第七章 7.2.4 生成的排列,STL实现
- 7.2.1 生成1~n的排列(全排列)【STL__next_permutation()_的应用】