UVA_10098
这个题目实际上就是刘汝佳白书上P116上的枚举排列问题。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char b[15];
int cmp(const void *_p,const void *_q)
{
char *p=(char *)_p;
char *q=(char *)_q;
return *p-*q;
}
void dfs(int n,char *A,int cur)
{
int i,j,c1,c2;
if(cur==n)
printf("%s\n",A);
else
for(i=0;i<n;i++)
if(!i||b[i]!=b[i-1])
{
c1=c2=0;
for(j=0;j<cur;j++)
if(A[j]==b[i])
c1++;
for(j=0;j<n;j++)
if(b[j]==b[i])
c2++;
if(c1<c2)
{
A[cur]=b[i];
dfs(n,A,cur+1);
}
}
}
int main()
{
int i,j,k,t,n;
char A[20];
scanf("%d",&t);
while(t--)
{
scanf("%s",b);
n=strlen(b);
qsort(b,n,sizeof(b[0]),cmp);
memset(A,'\0',sizeof(A));
dfs(n,A,0);
printf("\n");
}
return 0;
}