生成字典续序列。
// // main.cpp // 10098_1 // // Created by Fangpin on 15/3/7. // Copyright (c) 2015年 FangPin. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; char s[23],ans[23]; void dfs(int deep,int len){ if(deep==len) puts(ans); else{ for(int i=0;i<len;++i){ if(!i || s[i]!=s[i-1]){ int c1=0,c2=0; for(int j=0;j<deep;++j) if(ans[j]==s[i]) ++c1; for(int j=0;j<len;++j) if(s[i]==s[j]) ++c2; if(c1<c2){ ans[deep]=s[i]; dfs(deep+1,len); } } } } } int main(int argc, const char * argv[]) { // insert code here... int n; scanf("%d",&n); while(n--){ scanf("%s",s); memset(ans,0,sizeof(ans)); int len=strlen(s); sort(s,s+len); dfs(0,len); printf("\n"); } return 0; }
也可以使用c++库函数next_permutation(iter.begin(),iter.end())
// // main.cpp // 10098 // // Created by Fangpin on 15/3/7. // Copyright (c) 2015年 FangPin. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> using namespace std; int main(int argc, const char * argv[]) { // insert code here... int n; scanf("%d",&n); char s[29]; while(n--){ scanf("%s",s); int len=strlen(s); sort(s,s+len); printf("%s\n",s); while(next_permutation(s,s+len)){ printf("%s\n",s); } printf("\n"); } return 0; }
时间: 2024-12-12 19:22:09