1-n中取m个求全排列
#include<iostream>
#include<cstring>
using namespace std;
const int N=25;
int data[N];
bool used[N];
int i,j,n,m,k;
bool flag;
int main()
{
cin>>n>>m;
memset(used,false,sizeof(used));
for(i=1;i<=m;i++)
{
data[i]=i;
used[i]=true;
}
flag=true;
while(flag)
{
for(i=1;i<=m-1;i++)
cout<<data[i]<<" ";
cout<<data[m]<<endl;
flag=false;
for(i=m;i>=1;i--)
{
used[data[i]]=false;
for(j=data[i]+1;j<=n;j++)
if(!used[j])
{
used[j]=true;
data[i]=j;
flag=true;
break;
}
if(flag)
{
for(k=i+1;k<=m;k++)
for(j=1;j<=n;j++)
if(!used[j])
{
data[k]=j;
used[j]=true;
break;
}
break;
}
}
}
return 0;
}