排列组合

Posted 天秤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排列组合相关的知识,希望对你有一定的参考价值。

/*
排列组合

说明:
将一组数字、字母或符号进行排列,以得到不同的组合顺序,例如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 4

void 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");
    }
}

 

以上是关于排列组合的主要内容,如果未能解决你的问题,请参考以下文章

离散:常用排列组合模型归纳,DFS代码实现

关于各种排列组合java算法实现方法

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

Java 全排列与组合

c# 排列组合代码类

代码题(19)— 组合与排列