#include "stdio.h"
#define swap(arr, i , j)
{
if ((i) != (j)) {
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
void print_array(int *arr, int len)
{
int i;
printf("
");
for(i =0; i < len; i++) {
printf("%d ", arr[i]);
}
}
int permutation(int *arr, int pos, int n)
{
int i;
if (pos == n) { //递归结束条件
print_array(arr, n);
return 0;
}
for(i = pos; i < n; i++)
{
swap(arr, i, pos);//某个数字交换到 pos 位置
permutation(arr, pos + 1, n); //对出pos 位置后面的数,进行一次全排列
swap(arr, i, pos);//复原原来的排列,准备交换下一个数到pos 位置。
}
return 0;
}
int main(int argc, char *argv[])
{
int n = 0;
int i;
int number[20]; //已经有2432902008176640000 种排列方法了,输出来也很难保存这样多的数据了,所以程序不能大于这个数字。
printf("input n: ");
while (scanf("%d", &n)) {
if (n < 1) {
printf("n must big than zero.
");
continue;
}
if (n > 20) {
printf("n too big.
");
continue;
}
for (i = 0; i < n; i++) {
number[i] = i + 1;
}
permutation(number, 0, n);
printf("
input n: ");
}
return 0;
}
来至http://www.cnblogs.com/niniwzw/archive/2010/03/19/1689863.html