求1--m的n位数的全排列
输入数据为:T(数据组数),m,n
exp:
输入:1 3 2
输出:
32
31
23
21
13
12
#include<stdio.h>
#include<string.h>
#define max 10000
int biaoji[max];//标记数组
int a[max];//放入数据
void dfs(int m,int n,int k)//m:1到m n:n位数 k:表示第K位数
{
int i;
if(k==n)
{
for(int j=0;j<n;j++)
printf("%d",a[j]);
printf("\n");return;
}
for(i=m;i>=1;i--)//我是从大到小的全排列,根据需求自己调整
{
if(biaoji[i]==0)
{
a[k]=i; //将数据放进数组,方便输出
biaoji[i]=1;//数据被使用加上标记
dfs(m,n,k+1);
biaoji[i]=0;//回退的时候再把标记解除
}
}
return;
}
int main ()
{
int T;
int m,n;
scanf("%d",&T);
while(T--)
{
memset(biaoji,0,sizeof(biaoji));
memset(a,0,sizeof(a));
scanf("%d%d",&m,&n);
dfs(m,n,0);
}
return 0;
}