1、排列算法
Anm=n(n−1)(n−2)....(n−m)
从n个数中挑选m个数进行排列,从第一个数开始,每个数可以从0到n个数中选择,以此类推到第m个数,且前面用过的数后面就不能再用,故用mark[]去记录这个数,并在每一次执行到m后清零。
#include <stdio.h>
#include <string.h>
#define N 5
#define M 3
int a[N];
int b[M];
int arrange (int x,int n,int m,int a[],int b[]){
static int mark[N] ={0};
if(x == m){
for(int i=0;i<m;i++){
printf("%d,",b[i]);
}
printf("\n");
return 0;
}
for(int i=0;i<n;i++){
if(mark[i] == 0){
b[x] = a[i];
mark[i] ++;
arrange(x+1,n,m,a,b);
mark[i] =0;
}
}
return 0;
}
int main(){
for(int i=0;i<N;i++)
a[i] = i+1;
return arrange(0,N,M,a,b);
}