#include <stdio.h> #include<string.h> #include<queue> #include<string> using namespace std; bool vis[7]; char a[7],re[7]; int len; string ss; queue<string> s; void dfs(int cur) { if(cur>=len) { // for(int i=0;i<len;i++) // printf("%c",re[i]); re[len+1]='\0'; ss.assign(re,len); s.push(ss); //printf("%s\n",re); } else { for(int i=0;i<len;i++) { if(!vis[i]) { vis[i]=1; re[cur]=a[i]; dfs(cur+1); vis[i]=0; } } } } int main() { while(scanf("%s",a)!=EOF) { len=strlen(a); dfs(0); while(!s.empty()) { printf("%s\n",s.front().c_str()); s.pop(); } printf("\n"); } return 0; }
本文介绍了一种使用C++实现的字符串全排列算法。通过深度优先搜索(DFS)递归地生成输入字符串的所有可能排列,并利用队列保存结果。文章提供了一个完整的代码示例,演示了如何避免重复排列并输出所有不重复的排列结果。
1万+

被折叠的 条评论
为什么被折叠?



