zoukankan      html  css  js  c++  java
  • 全排列问题(c语言实现)

    问题描述:

    假设有数组里面存放26个字母,取出n个,以m个排列,计算排列的总数!

    注意:

    (1) m<n

    (2) 里面的元素不能重复排列

    (3)"遇零则止"

    核心代码如下:

    #include <stdio.h>
    #include <malloc.h>
    
    #include "../include/permutation.h"
    #include "../include/mec.h"
    
    static void permutate(char *result, boolean *beUsed, int i,
            int n, int m, char *alpha);
    
    static void permutate(char *result, boolean *beUsed, int i,
            int n, int m, char *alpha) {
        int index;
        
        if (i >= m) {         //递归的结束条件
            result[i] = 0;
            printf("%s
    ", result);
            
            return;
        }
        for (index = 0; index < n; index++) {
            if (beUsed[index] == FALSE) {
                beUsed[index] = TRUE;          //使使用的那个位子赋值为TRUE表示用过了
                result[i] = alpha[index];     //放该元素
                permutate(result, beUsed, i+1, n, m, alpha);
                beUsed[index] = FALSE;
            }
        }
    }
    
    void permutatation(char *alpha, int n, int m) {
        char *result;
        boolean *beUsed;
        
        result = (char *) calloc(sizeof(char), m + 1);
        beUsed = (boolean *) calloc(sizeof(boolean), n);
    
      //  alpha    ABCDEFG  n个字符
    
      // beUsed  0000000(若是用过了赋值为1)
    
      //下标      1234567
        
        permutate(result, beUsed, 0, n, m, alpha);
        
        free(beUsed);
        free(result);
    }
    执行代码如下:
    
    #include <stdio.h>
    #include "./include/permutation.h"
    
    int main() {
        char alpha[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        int n;
        int m;
        
        printf("请你输入n和m:");
        scanf("%d%d", &n, &m);
        
        permutatation(alpha, n, m);
    
        return 0;
    }
    



  • 相关阅读:
    watir-webdriver使用过程中异常
    分治算法
    回溯算法
    线性时间求取第 K 大数
    深度和广度优先搜索算法
    排序优化——模拟栈及三路快排
    排序算法之——归并排序和快速排序
    数据结构和算法之——算法复杂度分析
    LeetCode 10——正则表达式匹配
    线性代数之——复数矩阵
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9102884.html
Copyright © 2011-2022 走看看