(排列生成算法)枚举排列的两种方法:递归枚举和next_permutation (使用多用next_permutation)
来源:互联网 发布:rcpp软件 编辑:程序博客网 时间:2024/05/24 01:40
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
//枚举排列的两种方法:递归枚举和next_permutation
int shz[1000];
//生成 1~n 排列
void print_permutation(int n,int*A,int cur){
if(cur==n){
for(int i=0;i<n;i++){
printf("%d ",A[i]);
}
printf("\n");
}
else for(int i=1;i<=n;i++){
int ok=1;
for(int j=0;j<cur;j++)
if(A[j]==i)ok=0;
if(ok){
A[cur]=i;
print_permutation(n,A,cur+1);
}
}
}
//生成可重集的排列
void aprint_permutation(int n,int*P,int* A,int cur){
if(cur==n){
for(int i=0;i<n;i++)if(!i||P[i]!=P[i-1]){
printf("%d ",A[i]);
}
printf("\n");
}
else for(int i=1;i<=n;i++){
int c1=0,c2=0;
for(int j=0;j<cur;j++)if(A[j]==P[i])c1++;
for(int j=0;j<n;j++)if(P[i]==P[j])c2++;
if(c1<c2){
A[cur]=P[i];
aprint_permutation(n,P,A,cur+1);
}
}
}
//下一个排列
void nprint_permutation(int n,int* P){
do{
for(int i=0;i<n;i++){
printf("%d ",P[i]);
}
printf("\n");
}while(next_permutation(P,P+n));
}
int main(){
int P[3]={1,2,3};
print_permutation(3,shz,0);
printf("---------------------------------------------------\n");
aprint_permutation(3,P,shz,0);//还有问题
printf("---------------------------------------------------\n");
sort(P,P+3);
nprint_permutation(3,P);
return 0;
}
#include<cstdio>
#include<algorithm>
using namespace std;
//枚举排列的两种方法:递归枚举和next_permutation
int shz[1000];
//生成 1~n 排列
void print_permutation(int n,int*A,int cur){
if(cur==n){
for(int i=0;i<n;i++){
printf("%d ",A[i]);
}
printf("\n");
}
else for(int i=1;i<=n;i++){
int ok=1;
for(int j=0;j<cur;j++)
if(A[j]==i)ok=0;
if(ok){
A[cur]=i;
print_permutation(n,A,cur+1);
}
}
}
//生成可重集的排列
void aprint_permutation(int n,int*P,int* A,int cur){
if(cur==n){
for(int i=0;i<n;i++)if(!i||P[i]!=P[i-1]){
printf("%d ",A[i]);
}
printf("\n");
}
else for(int i=1;i<=n;i++){
int c1=0,c2=0;
for(int j=0;j<cur;j++)if(A[j]==P[i])c1++;
for(int j=0;j<n;j++)if(P[i]==P[j])c2++;
if(c1<c2){
A[cur]=P[i];
aprint_permutation(n,P,A,cur+1);
}
}
}
//下一个排列
void nprint_permutation(int n,int* P){
do{
for(int i=0;i<n;i++){
printf("%d ",P[i]);
}
printf("\n");
}while(next_permutation(P,P+n));
}
int main(){
int P[3]={1,2,3};
print_permutation(3,shz,0);
printf("---------------------------------------------------\n");
aprint_permutation(3,P,shz,0);//还有问题
printf("---------------------------------------------------\n");
sort(P,P+3);
nprint_permutation(3,P);
return 0;
}
0 0
- (排列生成算法)枚举排列的两种方法:递归枚举和next_permutation (使用多用next_permutation)
- 枚举全排列 STL next_permutation
- c++ next_permutation 枚举排列数
- 全排列生成算法:next_permutation
- 全排列生成算法:next_permutation
- 全排列生成算法:next_permutation
- 全排列生成算法:next_permutation
- 全排列生成算法:next_permutation
- 全排列生成算法:next_permutation
- 全排列生成算法:next_permutation
- 全排列生成算法:next_permutation
- 全排列(next_permutation,递归)
- Smallest Difference(Poj2718)(枚举全排列next_Permutation)
- 排列函数 prev_permutation和next_permutation的使用
- STL的排列算法next_permutation
- next_permutation全排列算法
- next_permutation(全排列算法)
- next_permutation(全排列算法)
- 广义表的基本实现
- 设计模式
- struts2.5以上 报方法不允许错误
- property not initialized at super.init call
- anaconda安装opencv
- (排列生成算法)枚举排列的两种方法:递归枚举和next_permutation (使用多用next_permutation)
- as plugin GsonFormat
- 详述mysql的子查询及其常用使用方法
- 什么是多线程?线程的生命周期?
- 玲珑杯 1032 A-B
- 算法ti
- 英语歌曲开启九月之旅
- 操作系统--调度学习笔记(3)--单处理器调度
- 【Spring】--OpenSessionInViewFilter 的配置及作用