//从N个数中选出r个的全排列生成
int N = 20;
int flag[N+1] = {0};
int data[N+1] = {0};
int r = 5;
void done(int i)//i 表示迭代的层次{
for(int j = 1;j <= N;j++){
if(flag[j]==0) {
flag[j] = 1;
data[i] = j;
if(i == r) output();
else done(i+1);
flag[j] = 0;
}
}
}
//输出组合
void output(){
for(int i = 1; i <= r;i++)
printf("%2d ",data[i]);
printf("/n");
}
int main(){
done(1);
return 0;
}