全排列C语言
以下是一个用C语言实现全排列的示例代码:
#include <stdio.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)); // backtrack
}
}
}
int main() {
char str[] = "ABC";
int n = strlen(str);
permute(str, 0, n - 1);
return 0;
}
这个代码使用递归的方式实现全排列。它的基本思路是,对于给定的字符串,我们依次将每个字符与其后面的字符交换,然后递归地生成剩余字符的全排列。每次递归调用时,我们都固定了一个字符,然后递归生成剩余字符的全排列。
在 permute 函数中,我们使用 swap 函数来交换字符。在每次递归调用之前,我们将当前字符与下一个字符交换,然后递归生成剩余字符的全排列。然后,我们再次交换这两个字符,以便进行下一轮迭代。
在 main 函数中,我们首先将要全排列的字符串传递给 permute 函数,并指定字符串的起始索引和结束索引。然后,我们调用 permute 函数来生成全排列。
以上代码的输出结果为:
ABC
ACB
BAC
BCA
CBA
CAB
原文地址: http://www.cveoy.top/t/topic/i6Bf 著作权归作者所有。请勿转载和采集!