首页 > 代码库 > 【排列组合】

【排列组合】

/*排列组合说明:将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如1 2 3这三个数的排列组合有:123、132、213、231、312、321。解法:可以使用递回将问题切割为较小的单元进行排列组合,例如1234的排列可以分为1[234] 、2[134] 、3[124] 、4[123]进行排列,这边利用旋转法,先将旋转间隔设为0,将最右边的数字旋转至最左边,并逐步增加旋转的间隔,例如:1234->旋转1->继续将右边234进行递回处理2134->旋转12为 变为 21->继续将右边134进行递回处理3124->旋转123为 变为 312->继续将右边124进行递回处理4123->旋转1234变为4123->继续将右边123进行递回处理*/#include <stdio.h>#include <stdlib.h>#define N 4void perm(int* ,int );int main(void){    int num[N + 1], i;    for(i = 1; i <= N; i++)    {        num[i] = i;    }    perm(num, 1);    return 0;}void perm(int* num, int i){    int j, k, tmp;        if(i < N)    {        for(j = i; j <= N; j++)        {            tmp = num[j];            for(k = j; k > i; k--)            {                num[k] = num[k - 1];            }            num[i] = tmp;            perm(num, i + 1);            for(k = i; k < j; k++)            {                num[k] = num[k + 1];            }            num[j] = tmp;        }    }    else    {        for(j = 1; j <= N; j++)        {            printf("%d", num[j]);        }        printf("\n");    }}

 

【排列组合】