序列可图化判定及顶点着色

1.度序列可图化问题

  可图化的度序列其表示的图并不唯一,即画出来的图有可能不是同构体,主要原因是由度序列产生生成矩阵的时候方法并不唯一。

  例子:度序列 [3 4 2 3 4 2]

图1

图2

  注意度数为3 的两个顶点在图1中并不连接,在图2中却相连,说明图1图2不是同构。

  对于可图化序列的简单图绘制需要用到生成矩阵,表示了随着顶点数增加而图拓展的过程。距离如下,度序列为 ,其相应的度序列矩阵为

            

  生成矩阵的第i行等于度序列矩阵的第i行减去它的第i+1行得到,若度序列矩阵出现负值,则该序列不可图。

2.图顶点着色问题

  对一定图顶点着色,正常着色法要求相邻顶点颜色不能相同,其需要的的最小颜色数目为该图的色数。

  本程序采用最小度优先法对图进行着色,对度序列为[3 4 2 4 3 2]的两种不同图分布进行了实验,实验结果表明需要的最少色数都为4,结果与图论经典算法色数相同,没有最大度优先的Welsh-Powell算法好。

  该序列的第一种图:

  本算法最少正常色数为4,最大度优先的Welsh-Powell算法为3;

  本算法最少正常色数为4,最大度优先的Welsh-Powell算法为4。

  序列可图化判定、简单图绘制(需要用到生成矩阵)、顶点正常着色的MATLAB程序如下:

 1 %2015.5.30 by anchor
 2 %To judge  a sequence is degree sequence or not and draw up a simple graph
 3 %and color the vertex
 4
 5 clc;clear all;clear
 6
 7 %% ==================== Part 1: Input Sequence ====================
 8 fprintf(‘please input the sequence \n‘);
 9 DegreeSeq = str2num(input(‘The sequence DegreeSeq:‘,‘S‘));
10 %Input sequence from txt
11 DegreeSeq=sort(DegreeSeq,‘descend‘);
12 LenDegreeSeq=length(DegreeSeq);
13 %% ==================== Part 2: Preliminary Judgment ====================
14 if  mod(sum(DegreeSeq),2) == 1 || (DegreeSeq(1)>LenDegreeSeq-1 ||DegreeSeq(LenDegreeSeq)<0)
15     disp(‘this sequence is not degree sequence‘);
16     return;
17 end
18 %% ==================== Part 3: Degree Matrix & Generative Matrix ====================
19 %acoording to the theorem but no descending sort
20 DegreeMat=zeros(LenDegreeSeq,LenDegreeSeq);
21 GenerativeMat = zeros(LenDegreeSeq,LenDegreeSeq);
22 DegreeMat(1,:)=DegreeSeq;
23 for i = 1:LenDegreeSeq-1
24     MaxDegree=max(DegreeSeq);
25     LocMaxDegree=(find(DegreeSeq==MaxDegree,1));
26     DegreeSeq(LocMaxDegree)=0;
27     location = MaxNLocation(DegreeSeq,MaxDegree);
28     DegreeSeq(location)=DegreeSeq(location)-1;
29     DegreeMat(i+1,:)=DegreeSeq;
30     if min(DegreeMat(i+1,:)) < 0
31     disp(‘this sequence is not degree sequence‘);
32     return;
33     end
34     GenerativeMat(i,:) = DegreeMat(i,:) - DegreeMat(i+1,:);
35 end
36 % GenerativeMat=[4 1 1 1 0 1;0 3 1 1 1 0;0 0 1 0 1 0;0 0 0 1 0 1;0 0 0 0 0 0;0 0 0 0 0 0];
37 %% ==================== Part 4: Draw Up Simple Graph ====================
38 if DegreeMat(LenDegreeSeq,LenDegreeSeq)==0
39  disp(‘this sequence is degree sequence‘);
40 end
41
42 [x,y]=NUniteCircle(LenDegreeSeq+1);
43 scatter(x,y,‘p‘,‘filled‘);%将每个点单独画成五角星
44 hold on;
45
46 for i = 1:LenDegreeSeq
47     j = LenDegreeSeq-i+1;
48     MaxDegree=max(GenerativeMat(j,:));
49     if MaxDegree ~= 0
50         Temp = GenerativeMat(j,:);
51         LocMaxTemp = find(Temp == MaxDegree,1);
52         Temp(LocMaxTemp) = 0;
53         LocNonZero=find(Temp~=0);
54         for k=1:length(LocNonZero)
55             plot([x(LocNonZero(k)) x(LocMaxTemp)],[y(LocNonZero(k)) y(LocMaxTemp)]);
56             hold on;
57         end
58     end
59 end
60 pause;
61 disp(‘现在开始顶点着色‘);
62 %% ==================== Part 5: Color The Vertex ====================
63 color = rand(GenerativeMat(1,1)+1,3);
64 colorsequence = 1:(GenerativeMat(1,1)+1);
65 colorSchedule = 1;
66 for i = 1:LenDegreeSeq
67     j = LenDegreeSeq-i+1;
68     MaxDegree=max(GenerativeMat(j,:));
69     if MaxDegree ~= 0
70         Temp = GenerativeMat(j,:);
71         LocMaxTemp = find(Temp == MaxDegree,1);
72         Temp(LocMaxTemp) = 0;
73         Color0Postion = max((find(Temp == 0)));
74         Color1Postion = find(Temp == 1);
75         colorSchedule = min(setdiff(colorsequence,VertexColo(Color1Postion)));
76         plot(x(LocMaxTemp),y(LocMaxTemp),‘p‘,‘color‘,color(colorSchedule,:),‘linewidth‘,3); hold on;
77     end
78     plot(x(j),y(j),‘p‘,‘color‘,color(colorSchedule,:),‘linewidth‘,3); hold on;
79     hold on;
80     VertexColo(j) = colorSchedule;
81 end
时间: 2024-11-08 00:25:40

序列可图化判定及顶点着色的相关文章

Havel-Hakimi定理---通过度数列判断是否可图化

0.可图:一个非负整数组成的序列如果是某个无向图的度序列,则该序列是可图的. 1.度序列:Sequence Degree,若把图G所有顶点的度数排成一个序列,责成该序列为图G的一个序列.该序列可以是非递增序的.可以是非递减序列.可以是任意无序的. 2.Havel-Hakimi定理:给定一个非负整数序列{d1,d2,...dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 定理描述:由非负整数组成的有限非递增序列,S={d1,d

度序列可图性判断(Havel-Hakimi定理)

Havel定理描述 给定一个非负整数序列{d1,d2,-dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 可图化的判定比较简单: $d_1 + d_2 + d_3 +-+d_n = 0(mod2)$ $n-1geq d_{max}$ 关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环. 可简单图化的判定,有一个Havel定理,是说: 我们把序列排成不增序,即d1>=d2>=->=dn,则d可简单图化

向顶点着色器提供顶点参数

对于 CG/HLSL 顶点程序,模型网格顶点数据被作为输入传递给顶点着色器函数.每个输入都需要一个语义来详细指定.比如,POSITION输入是 顶点的位置,NORMAL是顶点的法线. 通常,顶点数据输入被声明成一个结构体,而不是一个个的罗列他们.几个常用的顶点结构体都被丁艳在UnityCG.cginc include file里面了,并且大多数情况下,这些都够用了.这些结构体是: appdata_base:位置.法线还有一个贴图坐标 appdata_tan:位置.切线.法线.还有一个贴图坐标 a

关于可图化序列的一点结论 NEU 1429

Graphic Sequence A graphic sequence is a sequence of numbers which can be the degree sequence of some graph. A sequence can be checked to determine if it is graphic using GraphicQ[g] in the Mathematica package Combinatorica` . Erd?s and Gallai (1960)

可图性判定--Havel-Hakimi定理

两个概念 1.度序列 若把图G所有顶点的度数排成一个序列S,则称S为图G的度序列. 2.序列是可图的 一个非负整数组成的序列如果是某个无向图的度序列,则称该序列是可图的. 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个

顶点着色器和片断着色器

顶点和片段着色器 必备知识 熟悉Stage3D API.最好之前使用过VertexBuffer.在继续这个教程之前一定要先阅读本系列的第一个教程(Stage3D原理).    所需软件 Flash Builder 4.5 Premium (Download trial) Flash Professional CS5.5 (Download trial) 在本章中,你将对着色器(Shaders)有一个大概的了解.着色器是Stage3D渲染管道的核心.你将学到顶点和片段着色器是个什么东东,它们在3D

POJ 1659 Frogs&#39; Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 4137   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

GDC2017【神秘海域 4】中所使用的顶点着色器技术

原文链接 http://game.watch.impress.co.jp/docs/news/1047802.html 会場:San Francisco Moscone Convention Center Naughty Dog的Lead Technical Artist.Andrew Maximov氏 在GDC 2017的最后一天,Naughty Dog在题为[Technical Art Techniques of Naughty Dog: Vertex Shaders and Beyond]

unity shader 学习 (2)Vs【顶点着色器】 和 Ps【像素着色器】

上一章我写了渲染管线,中间提到了shader的作用,我们的大shader同学主要就是负责被CPU指派到GPU中做一些如顶点转换,关照模型,光栅化等操作的. 大shader有两种类型,他们分别是Vs[顶点着色器] 和 Ps[像素着色器].. 他们可以同时存在,也可以分开存在,没有任何使用限制. 当时如果同时存在的话,必须Vs执行完成后再交给Ps处理. 他们两个家伙是配合固定流程管线而存在的.