zoukankan      html  css  js  c++  java
  • 【排列组合】

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

    运行结果:

  • 相关阅读:
    Spring MVC
    Hibernate的状态
    设计模式
    Git在Eclipse中的使用
    深入理解Node.js基于事件驱动的回调
    nodejs核心技术
    webpack使用
    vue各种实例集合
    vue之component
    axios详解
  • 原文地址:https://www.cnblogs.com/libra-yong/p/6360157.html
Copyright © 2011-2022 走看看