C语言递归算法实现字符串全排列
以下是用C语言设计的递归算法生成n个元素{'r1...rn'}的全排列的示例代码:
#include <stdio.h>
void swap(char *x, char *y) {
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permute(char *str, int start, int end) {
int i;
if (start == end) {
printf('%s\n', str);
} else {
for (i = start; i <= end; i++) {
swap((str + start), (str + i));
permute(str, start + 1, end);
swap((str + start), (str + i)); // revert back to original string
}
}
}
int main() {
char str[] = '123';
int n = strlen(str);
permute(str, 0, n - 1);
return 0;
}
该代码采用递归的方式生成全排列。函数permute用于生成全排列,其中start表示当前排列的起始位置,end表示当前排列的结束位置。当start等于end时,表示已经生成了一个完整的排列,将结果打印出来。否则,从start到end的每个位置都尝试填入一个元素,并递归地生成剩余元素的全排列。生成完当前位置的全排列后,需要将位置start和位置i的元素交换回来,以便继续生成其他排列。
在main函数中,定义了一个字符串str,并通过调用permute函数来生成全排列。
原文地址: https://www.cveoy.top/t/topic/fzfB 著作权归作者所有。请勿转载和采集!