排列和组合算法的实现方法_C语言经典案例
排列和组合算法是考查递归的常见算法,这两种算法能用递归简洁地实现。
本人在经过多次摸索和思考之后,总结如下,以供参考。
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
chararray[]="abcd";
#defineN4
#defineM3
intqueue[N]={0};
inttop=0;
intflag[N]={0};
voidperm(ints,intn)
{
inti;
if(s>n)
{
return;
}
if(s==n)
{
for(i=0;i<n;i++)
{
printf("%c",queue[i]);
}
printf("\t");
return;
}
for(i=0;i<n;i++)
{
if(flag[i]==0)
{
flag[i]=1;
queue[s]=array[i];
perm(s+1,n);
flag[i]=0;
}
}
}
voidcomb(ints,intn,intm)
{
inti;
if(s>n)
return;
if(top==m)
{
for(i=0;i<m;i++)
{
printf("%c",queue[i]);
}
printf("\t");
return;
}
queue[top++]=array[s];
comb(s+1,n,m);
top--;
comb(s+1,n,m);
}
intmain()
{
printf("\nperm():\n");
perm(0,N);
printf("\ncombination():\n");
comb(0,N,M);
printf("\n");
return0;
}
运行结果:
perm(): abcdabdcacbdacdbadbcadcbbacdbadcbcadbcda bdacbdcacabdcadbcbadcbdacdabcdbadabcdacb dbacdbcadcabdcba combination(): abcabdacdbcd
以上就是小编为大家带来的排列和组合算法的实现方法_C语言经典案例的全部内容了,希望对大家有所帮助,多多支持毛票票~