|
|
发表于 2012-3-6 21:28:06
|
显示全部楼层
- #include <iostream>
- using namespace std;
- const int MAXN = 100;
- int count;
- //gen_perm产生字典序排列P(n,m),产生元素用1..n表示
- void gen_perm(int n,int m);
- //dummy为产生后调用的函数,传入a[]和n,a[0]..a[n-1]为一次产生的结果
- void dummy(int* a,int n);
- //gen_perm内部调用函数
- void _gen_perm(int* a,int n,int m,int l,int* temp,int* tag);
- int main(){
- gen_perm(5,2);
- }
- void dummy(int* a,int n){
- int i;
- cout<<count++<<": ";
- for (i=0;i<n-1;i++)
- cout<<a[i]<<' ';
- cout<<a[n-1]<<endl;
- }
- void _gen_perm(int* a,int n,int m,int l,int* temp,int* tag){
- int i;
- if (l==m)
- dummy(temp,m);
- else
- for (i=0;i<n;i++)
- if (!tag[i]){
- temp[l]=a[i],tag[i]=1;
- _gen_perm(a,n,m,l+1,temp,tag);
- tag[i]=0;
- }
- }
- void gen_perm(int n,int m){
- int a[MAXN],temp[MAXN],tag[MAXN]={0},i;
- for (i=0;i<n;i++)
- a[i]=i+1;
- _gen_perm(a,n,m,0,temp,tag);
- }
复制代码 |
|