图论学习-序列是否可图化(2)

来源:互联网 发布:破获特大网络售假药案 编辑:程序博客网 时间:2024/05/12 06:56


    上次学习了havel-hakimi定理判断一个度数序列是否可图,http://blog.csdn.net/wangyanphp/article/details/8834608


(Havel-Hakimi 定理)

由非负整数组成的非增序列s:d1, d2, …, dn(n ≥ 2, d1 ≥ 1)是可图的,当且仅当序列
                  s1: d2 – 1, d3 – 1, …, dd1+1 – 1, dd1+2, …, dn
是可图的。序列s1 中有n-1 个非负整数,s 序列中d1 后的前d1 个度数(即d2~dd1+1)减1 后构成
s1 中的前d1 个数


为什么要求是非增序列呢?这样的话,每次都得排序。然后写了一个方法,不用排序,不知道对不对,希望读者指教。



//参数是:序列元素数,序列(度数),返还矩阵bool Graphic(int nVertex, int* degree ,int** Edge){/*序列中的非零数,代表的是除去主元元素还剩多少非零元素,例如   4,3,1,5,4,2,1,第一次是除去4之后的非零元素,第二次是除去3之后的非零元素*/int nNonzeroVertex=nVertex;for(int i=0;i<nVertex;++i){if(degree[i]==0)//如果元素为零则跳过,不以此元素作为主元continue;//非零元素除去这个的主元,代表剩余非零元素--nNonzeroVertex;if(degree[i]>nNonzeroVertex)return false;for(int j=1;j<=degree[i];++j){if(degree[i+j]==0){degree[i]++;//此处的degree[i]不是代表i的度数,而是后面有的哪几个元素需要减continue;}//如果某一非零元素度为1,那么减去1之后,将会变为0,所以非零元素减1if(degree[i+j]==1)--nNonzeroVertex;--degree[i+j];Edge[i][i+j]=Edge[i+j][i]=1;}}return true;}





原创粉丝点击