求有重复数字的全排列算法。

我同一个随机函数得到0~9之间的任意数字然后进行全排列,可是我的这个算法却只能实现无重复数字的全排列,研究了半天没有结果,水平实在有限,希望高手帮我看看。。

#include

#include

#include

#include

#include "windows.h"

#include

#define MAX 10  //定义从09里随机取数.

int M;       //随机取出的数的个数

int deep;   //深度

int j=0;    //增加一个计数器,跟踪最终排列所在的位置

 

 void swap(int *a,int *b)

{

    int temp;

    temp=*a;

    *a=*b;

    *b=temp;

}

 void  print_it(int arr[])  

{ 

      ++j;   

      ofstream fout("D:/test.txt",ios::app); //将结果以文本输出

      fout<        

   for(int  i=0;i      

       fout<

       fout<

}  

 

void   perm( int arr[], int deep=0)  

{  

  if(deep==M)   //   如果已经排到最后  

  {  

     print_it(arr);      //   打印数组     

     return;  

  }  

  for(int i=deep;i     //   对当前位置后的所有位置  

  {  

    swap(&arr[deep],&arr[i]);       //   交换位置  

    perm(arr,deep+1);             //   递归,继续后面的调用  

    swap(&arr[deep],&arr[i]);       //   在交换回来,保持原有的排列次序  

  }  

}  

 

void main()

{  

    cout<<"Input the amounts of the data:";

    cin>>M;

    srand((unsigned)time(NULL));       //srand()函数产生一个以当前时间开始的随机种子

    int *Array=new int[M];

       for(int i=0;i

       {  Array[i]=rand()%MAX;       //MAX为最大值,其随机域为0~MAX-1

          cout<  

       }

     perm(Array,deep=0);

        delete []Array;

}

你可能感兴趣的:(算法,delete,null,ios)