读书人

求排列组上算法

发布时间: 2012-08-29 08:40:14 作者: rapoo

求排列组合算法
排列:
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);} 

读书人网 >C语言

热点推荐