C言語による全排列の再帰的アルゴリズムの実装方法

C 言語で再帰を使用して全順列アルゴリズムを実装できます。以下にサンプルコードを示します。

#include <stdio.h>
#include <string.h>

// 交换两个字符的位置
void swap(char *x, char *y) {
    char temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

// 递归生成全排列
void permute(char *str, int l, int r) {
    int i;
    if (l == r) {
        printf("%s\n", str); // 输出全排列结果
    } else {
        for (i = l; i <= r; i++) {
            swap((str + l), (str + i));
            permute(str, l + 1, r);
            swap((str + l), (str + i)); // 恢复原始顺序,保证下一次循环时数组顺序正确
        }
    }
}

int main() {
    char str[] = "ABC";
    int n = strlen(str);
    permute(str, 0, n - 1); // 调用全排列函数
    return 0;
}

このコードを実行した結果:

ABC
ACB
BAC
BCA
CBA
CAB

このアルゴリズムは再帰的にすべての可能な順列組み合わせを生成し、文字の位置を入れ替えることで実現されます。

bannerAds