生成1-n的全排列组合

 
将1-n之间的自然数进行全排列,代码如下所示:
 
 
#define N 6
#define FULL -1//完成

void test_row()
{
	int num[N];//待排列数组
	bool use[N];//记录已经排列的数
	for(int k=0;k
 
 

 上面的程序有个问题:只能从最开始的1……n这样的状态开始排列组合,现在经过改进,可以从任一个状态开始排列,如果状态不对,还可以纠正,代码如下所示:

#define N 6
#define FULL -1//完成

void test_row()
{
	int num[N]={5,4,0,1,2,3};//待排列数组
	bool use[N];//记录已经排列的数
	for(int k=0;k


 上面的程序会把所有的结果都显示出来,再改改,可以使之显示顺序排列的下一个组合,这里主要是添加了一个参数flag,由于上面程序中在返回的过程中会有清零的过程,这个flag可以指示是否清零。这样就可以是递归程序有决定的是否清零,从而保留已经排序的数,代码如下所示:

#define N 6
#define FULL -1//完成
#define END 0
#define FLAG_C 0//需要清零
#define FLAG_N 1//不需要清零

void test_row()
{
	int num[N]={5,4,0,1,2,3};//待排列数组
	bool use[N];//记录已经排列的数
	for(int k=0;k


 上面这个程序有问题,读者可以自己去运行一下,看看有什么问题,下面是暂时自认为正确的代码,稍稍有点不同:

#define N 6
#define FULL -1//完成
#define END 0
#define FLAG_C 0//需要清零
#define FLAG_N 1//不需要清零

void show(int*r,int length)
{
		for(int j=0;j


 

 

你可能感兴趣的:(生成1-n的全排列组合)