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(全排列)

相关文章:

你感兴趣的文章:

标签云: