UVA 10098 Generating Fast

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;
}

  

原文地址:https://www.cnblogs.com/staginner/p/2164601.html