对于一个图,我们可以用一个度序列来表示这个图。首先理解一个概念,什么是度。

在有向图中:

入度就是:某个顶点作为终点的次数和。

出度就是:某个顶点作为起点的次数和。

在无向图中:

度就是:某个顶点的边数

   所以一个图必然可以写出一个度序列(如果顶点没有先后顺序,那么度序列不唯一),给定一个合法的度序列,也可以画出一个或多个图。那么怎样判断一个度序列是否合法并且画出一种可能的图呢?这就需要Havel-Hakimi算法。下面简单介绍下。

   首先对于一个度序列,如果某个度比总点数还多,那么这个度序列一定不合法,比如给定三个点,某个点的度最大为2(与其他两个点相连),如果度大于2,那么一定不合法。如果这里无法判断,那么就要用到Havel-Hakimi算法,Havel-Hakimi算法的主要思想就是如果这个度序列表示的图合法,那么我从图中取走一个点后,这个图依然合法。依据这个思想,我们先把度序列从大到小排序,以方便后续操作,然后我们每次删除度最大的点,也就是度序列最前边的点,如果删除了某个点,那么与这个点相连的点度必然要减一,问题来了,我们并不知道那些点和这个点相连,由于我们是从大到小排序的,我们就假设后面的m(假设首个点度为m)个点和首个点相连,既然删除了首个点,那么从首个点往后的m个点,度都要减一,如果执行了若干次操作后,后面所有的点的度序列为0,那么这个度序列合法,如果出现了某个点的度序列为负数,那么这个度序列不合法。由此,根据Havel-Hakimi算法,我们也可以给出一种可能的图,由于我们每次假设首个点和后m个点相连,所以图也就自然有了(可能并不唯一),我个人认为Havel-Hakimi算法和物理上的归谬法有点像,先假设成立,然后使用各种符合图的形式去对这个度序列进行操作,如何这个度序列真的合法,那在一系列合法的操作后,这个度序列仍然应该合法,否则不合法。