排列和组合算法的实现方法_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语言经典案例的全部内容了,希望对大家有所帮助,多多支持毛票票~