C语言排序不重复全排列字符串
时间: 2024-12-20 17:15:22 浏览: 11
在C语言中,生成一个字符串数组的所有不重复全排列可以是一个复杂的问题,特别是对于长字符串。一种常见的解决方案是利用递归和回溯算法,如广度优先搜索(BFS)或深度优先搜索(DFS)。这里我们可以使用递归来实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 交换两个字符
void swap(char *str, int i, int j) {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
}
// 排列函数,处理当前索引i及之后的字符
void permute(char *str, int l, int r) {
if (l == r)
printf("%s\n", str);
else {
for(int i = l; i <= r; i++) {
// 交换当前字符到起始位置
swap(str + l, l, i);
// 递归处理剩余字符
permute(str, l+1, r);
// 恢复原状态(将字符放回原来的位置)
swap(str + l, l, i); // 这里很重要,恢复之前的状态,防止影响后续字符
}
}
}
int main() {
char str[] = "abc";
int n = strlen(str);
permute(str, 0, n - 1);
return 0;
}
```
这个程序首先确定了字符串的长度,然后从第一个字符开始,尝试将其与所有其他字符进行组合,递归地对剩下的字符进行排列,直到所有的字符都被遍历过。
阅读全文