您的位置:首页 > 其它

按照字典序枚举排列

2014-03-12 20:31 225 查看

打印所有的排列

       写了两个小程序,一个用于打印全排列,另一个用于打印可重复的排列。两个都是按字典序排列,用递归实现。后一个只是去掉了布尔型数组和相应的重复判断。
代码贴出来:
/*
* 打印n的全排列!
*/

#include <iostream>
#include <cstring>
using namespace std;

#define MAX 200

void print_permutation(int, bool *, int *, int);

int main()
{
int n;
bool isPrint[MAX];
int v[MAX];
memset(isPrint, 0, sizeof(isPrint));
memset(v, 0, sizeof(v));
cin >> n;
print_permutation(0, isPrint, v, n);

return 0;
}

void print_permutation(int num, bool *isPrint, int *v, int n)
{
if (num == n)
{
for (int i = 0; i < n; ++ i)
{
cout << v[i] << " ";
}
cout << endl;
return ;
}

else
{
for (int i = 0; i < n; ++ i)
{
if ( !isPrint[i] )
{
isPrint[i] = 1;
v[num] = i + 1;
// 打印第num+1个数
print_permutation(num + 1, isPrint, v, n);
isPrint[i] = 0;
}
}
}
}

/*
* 打印可重复的n排列!
*/

#include <iostream>
#include <cstring>
using namespace std;

#define MAX 200

void print_permutation(int, int *, int);

int main()
{
int n;
int v[MAX];
memset(v, 0, sizeof(v));
cin >> n;
print_permutation(0, v, n);

return 0;
}

void print_permutation(int num, int *v, int n)
{
if (num == n)
{
for (int i = 0; i < n; ++ i)
{
cout << v[i] << " ";
}
cout << endl;
return ;
}

else
{
for (int i = 0; i < n; ++ i)
{
v[num] = i + 1;
// 打印第num+1个数
print_permutation(num + 1, v, n);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐