求排列组合算法
排列:
char obj[] = {0,1,2,3,4,5,6,7,8};
obj 中包含九个字符,请打印出从这个九个字符中任意取出n个数的结果,即P(m,n)排列
在网上搜集很久,只找到了全排列的算法实现,但这种通用的排列的算法实现没找到,哪位高人愿意共享一下自己的算法实现?或给指定一个现成的排列组合算法实现库?
非常感谢,感觉这算法很普通的,为什么就没有人实现呢?
只有30分了,全部奉上!
[解决办法]
- C/C++ code
#include <stdio.h>#include <stdlib.h>void pnm(int n, char src[], int m, char des[], int pos){ if(m==0) { while(--pos>=0) { printf("%c", des[pos]); } printf("\n"); return; } else { int i; char *new_src = (char*)malloc((n-1)*sizeof(char)); for(i=0; i<n; ++i) { des[pos] = src[i]; int j; for(j=0; j<i; ++j) { new_src[j] = src[j]; } while(j<n-1) { new_src[j] = src[j+1]; ++j; } pnm(n-1, new_src, m-1, des, pos+1); } }}void main(){ int n = 2; char obj[9] = {'0','1','2','3','4','5','6','7','8'}; char *des = (char*)malloc(n*sizeof(char)); pnm(9, obj, n, des, 0);}