组合数学
songxueyu
这个作者很懒,什么都没留下…
展开
-
字典序法生成全排列
/* 用字典序法生成全排列*/#include#includevoid generate_i(int *p,int n,int *i){ int j=n; while(p[j-1]>=p[j]){ j--; } *i=j;}void generate_j(int *p,int n,int i,int *j){ int k=n; while(p[i-1]>=p[原创 2013-10-16 23:11:57 · 1110 阅读 · 0 评论 -
序数法生成全排列
/* 序数法生成全排列*/#include#include//注意:为了更好理解,a数组的实际长度为n,p数组的实际长度为n+1,a[0]和p[0]弃之不用//生成a1,a2,a3……void generate_a(int *a,int N,int n){ int i; for(i=1;N>0;i++){ a[i]=N%(i+1); N=N/(i+1); } wh原创 2013-10-16 23:10:47 · 3130 阅读 · 0 评论 -
运用Caley定理恢复树
n个有标号1,2,……,n的顶点的树的数目等于n^(n-2)。以下程序由用户输入顶点的数目然后得出所有可能的树并输出到文件里。#include#include//事实上,每次只要获得d序列和f序列的第一个元素就可以了,但是为了更明显地表示出来,还是全部生成了d和f序列//设置数组array为v值,len为数组长度void reset_array(int *array,int原创 2013-10-12 14:13:21 · 800 阅读 · 0 评论 -
组合的生成
/* 组合的生成*/#include#includevoid generate_i(int *c,int n,int r,int *i){ int j; for(j=r;j>=1;j--){ if(c[j]<(n-r+j)){ break; } } *i=j;}void set_cj(int *c,int r,int i){ int j; for(j原创 2013-10-17 09:30:19 · 990 阅读 · 0 评论