首页 > 代码库 > uva 10098 Generating Fast(全排列)
uva 10098 Generating Fast(全排列)
还是用的两种方法,递归和STL,递归那个是含有反复元素的全排列,这道题我 没有尝试没有反复元素的排列,由于从题目上并没有发现一定是有反复元素的()
贴代码:
<span style="font-family:Courier New;font-size:18px;">#include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorithm> using namespace std; int cmp(const void *a,const void *b) { return *(char *)a - *(char *)b; } int main() { int T; char a[15]; scanf("%d",&T); while(T--) { scanf("%s",a); int len = strlen(a); qsort(a,len,sizeof(a[0]),cmp); puts(a); while(next_permutation(a,a+len)) { puts(a); } puts(""); } return 0; } </span>递归:
<span style="font-family:Courier New;font-size:18px;">#include<stdio.h> #include<string.h> #include<stdlib.h> int cmp(const void *a,const void *b) { return *(char *)a - *(char *)b; } void solve(int len,char *a,char *b,int cur) { int i,j; if(cur == len) { puts(b); return ; } else { for(i=0; i<len; i++) { if(!i||(a[i] != a[i-1])) { int ans1 = 0, ans2 = 0; for(j=0; j<len; j++) if(a[i] == a[j]) ans1++; for(j=0; j<cur; j++) if(b[j]==a[i]) ans2++; if(ans2 < ans1) { b[cur] = a[i]; solve(len, a, b, cur+1); } } } } return ; } int main() { int T; char a[15]; char b[15]; scanf("%d",&T); while(T--) { memset(a,'\0',sizeof(a)); memset(b,'\0',sizeof(b)); scanf("%s",a); int len = strlen(a); qsort(a,len,sizeof(a[0]),cmp); solve(len,a,b,0); puts(""); } return 0; } </span>
uva 10098 Generating Fast(全排列)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。