全排列问题
Posted 离愁i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全排列问题相关的知识,希望对你有一定的参考价值。
问题描述:
假设有数组里面存放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;
}
以上是关于全排列问题的主要内容,如果未能解决你的问题,请参考以下文章