用C++写一个递归解决全排列
时间: 2024-05-11 22:19:00 浏览: 107
以下是使用递归解决全排列的C代码:
```c
#include <stdio.h>
void swap(char *x, char *y);
void permute(char *a, int l, int r);
int main() {
char str[] = "ABC";
int n = sizeof(str) / sizeof(str[0]);
printf("Permutations of '%s' are:\n", str);
permute(str, 0, n - 1);
return 0;
}
void swap(char *x, char *y) {
char temp = *x;
*x = *y;
*y = temp;
}
void permute(char *a, int l, int r) {
if (l == r) {
printf("%s\n", a);
} else {
for (int i = l; i <= r; i++) {
swap((a + l), (a + i));
permute(a, l + 1, r);
swap((a + l), (a + i)); // backtrack
}
}
}
```
该程序将字符串 "ABC" 的全排列打印出来。在函数 `permute` 中,我们首先检查如果 `l` 和 `r` 相等,表示我们已经到了最后一个字符,因此我们打印当前字符串。否则,我们循环从 `l` 到 `r`,并交换 `l` 和 `i` 索引处的字符。然后我们递归调用 `permute`,并将 `l` 设置为 `l+1`。当递归回来时,我们需要再次交换 `l` 和 `i` 索引处的字符,以便进行回溯。
阅读全文