//从M中选N个不同数字的所有排列
#include “stdio.h”
int m, n;
//=================================
int Place(int t) //判重
{ int j;
for(j=1; j<=t-1; ++j)
if( a[j]==a[t]) return 0;
return 1; }
//==================================
void Search( )
{ int t;
t=1; a[t]=0;
do { a[t]=a[t]+1;
if (a[t]>m) //超过最大值,回溯
{ a[t]=0; t=t-1; }
else
if(Place(t))
if (t==n)
输出a[1]---a[n]
else
{ ++t; a[t]=0; } //深搜
} while (t!=0);
}
//================================
int main( )
{ printf(“Please input m,n:” );
scanf(“%d %d ”,&m,&n);
Search( ); }