码迷,mamicode.com
首页 > 其他好文 > 详细

全排列问题

时间:2018-05-29 01:48:51      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:boolean   res   print   clu   PQ   i+1   全排列   call   abc   

问题描述:

假设有数组里面存放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\n", result);
        
        return;
    }
    for (index = 0; index < n; index++) {
        if (beUsed[index] == FALSE) {
            beUsed[index] = 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);
    
    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;
}


全排列问题

标签:boolean   res   print   clu   PQ   i+1   全排列   call   abc   

原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9102884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!