#include <iostream>
#include <stdio.h>
#include <stdlib.h>
static void ListPermutations(int *nums);
static void RecursivePermute(int *nums,int k);
static void ExhcangeNums(int *nums,int p1,int p2);
static void PrintPermutations(int *nums);
static long count=0;
using namespace std;
int main()
{
int i,n,*nums;
while(1) {
printf("input an int(0:exit): ");
scanf("%d", &n);
if(n==0) {
break;
}
nums=(int *)(malloc((n+1)*sizeof(int)));
if(nums==NULL) {
printf("Out of memory!");
}
else {
nums[0]=n;
for(i=1;i<=n;i++) {
nums[i]=i;
}
printf("\nPermutations: \n");
printf("-------------------------\n");
ListPermutations(nums);
free(nums);
printf("-------------------------\n");
printf("%d!=%ld\n\n",n,count);
count=0;
}
}
return 0;
}
static void PrintPermutations(int *nums)
{
int i;
for(i=1;i<=nums[0];i++) printf("%3d",nums[i]);
printf("\n");
count++;
}
/*下面三个函数是关键*/
static void ListPermutations(int *nums)
{
RecursivePermute(nums,1);
}
static void RecursivePermute(int *nums,int k)
{
int i;
if(k==nums[0]) PrintPermutations(nums);
else {
for(i=k;i<=nums[0];i++) {
ExhcangeNums(nums,k,i);
RecursivePermute(nums,k+1);
ExhcangeNums(nums,k,i);
}
}
}
static void ExhcangeNums(int *nums,int p1,int p2)
{
char tmp;
tmp=nums[p1];
nums[p1]=nums[p2];
nums[p2]=tmp;
}
评论0