http://acm.nyist.net/JudgeOnline/problem.php?pid=32
#include<stdio.h>
#include<string.h>
int visit[20],a[20],n,r,b[20];
void dfs(int num)
{
int i;
if(num==r)
{
for(i=0;i<r;i++)
printf("%d",b[i]);
putchar(10);
return;
}
for(i=1;i<=n;i++)
{
if(!visit[i])
{
visit[i]=1;
b[num]=a[i];
if(b[num-1]>b[num])
dfs(num+1);
visit[i]=0;
}
}
}
int main()
{
int i;
scanf("%d%d",&n,&r);
for(i=1;i<=n;i++)
a[i]=n-i+1;
memset(visit,0,sizeof(visit));
for(i=1;i<=n;i++)
{
visit[i]=1;
b[0]=a[i];
dfs(1);
visit[i]=0;
}
return 0;
}