给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一相应。则称此序列可图化。进一步。若图为简单图,则称此序列可简单图化
至于能不能依据这个序列构造一个图,就须要依据Havel-Hakimi定理中的方法来构图。
可图化的判定:d1+d2+……dn=0(mod 2)。关于详细图的构造。我们能够简单地把奇数度的点配对,剩下的所有搞成自环。

可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d2-1,d3-1,……d(d1+1)-1。 d(d1+2)。d(d1+3)。……dn}可简单图化。简单的说,把d排序后,找出度最大的点(设度为d1),把它与度次大的d1个点之间连边。然后这个点就能够无论了,一直继续这个过程,直到建出完整的图,或出现负度等明显不合理的情况。

当然构图过程中也会出现不合理的情况。

1:某次对剩下序列排序后,最大的度数比剩下的顶点数还要多。
2:度数-1后,出现负数。

上面两种情况都是无法构成图的。
至于构图,我觉得还是看代码来的实在。这里有个样例,结合上面的解释。希望你能理解。
给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一相应。则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化
可图化的判定:d1+d2+……dn=0(mod 2)。关于详细图的构造,我们能够简单地把奇数度的点配对。剩下的所有搞成自环。

可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn。则d可简单图化当且仅当d’={d2-1,d3-1,……d(d1+1)-1。 d(d1+2)。d(d1+3),……dn}可简单图化。简单的说,把d排序后,找出度最大的点(设度为d1),把它与度次大的d1个点之间连边,然后这个点就能够无论了。一直继续这个过程,直到建出完整的图,或出现负度等明显不合理的情况。

给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一相应,则称此序列可图化。

进一步。若图为简单图,则称此序列可简单图化

可图化的判定:d1+d2+……dn=0(mod 2)。关于详细图的构造,我们能够简单地把奇数度的点配对。剩下的所有搞成自环。

可简单图化的判定(Havel定理):把序列排成不增序,即d1>=d2>=……>=dn。则d可简单图化当且仅当d’={d2-1。d3-1。……d(d1+1)-1, d(d1+2),d(d1+3),……dn}可简单图化。简单的说。把d排序后。找出度最大的点(设度为d1)。把它与度次大的d1个点之间连边。然后这个点就能够无论了,一直继续这个过程,直到建出完整的图。或出现负度等明显不合理的情况。
Frogs' Neighborhood
Time Limit: 5000MS   Memory Limit: 10000K
Total Submissions: 8315   Accepted: 3522   Special Judge

Description

未名湖附近共同拥有N个大小湖泊L1L2, ..., Ln(当中包含未名湖),每一个湖泊Li里住着一仅仅青蛙Fi(1 ≤ i ≤ N)。

假设湖泊LiLj之间有水路相连,则青蛙FiFj互称为邻居。如今已知每仅仅青蛙的邻居数目x1x2,
...,xn,请你给出每两个湖泊之间的相连关系。

Input

第一行是測试数据的组数T(0 ≤ T ≤ 20)。每组数据包含两行。第一行是整数N(2 < N < 10)。第二行是N个整数,x1x2,..., xn(0 ≤ xi ≤ N)。

Output

对输入的每组測试数据,假设不存在可能的相连关系,输出"NO"。否则输出"YES"。并用N×N的矩阵表示湖泊间的相邻关系,即假设湖泊i与湖泊j之间有水路相连,则第i行的第j个数字为1,否则为0。每两个数字之间输出一个空格。

假设存在多种可能,仅仅需给出一种符合条件的情形。相邻两组測试数据之间输出一个空行。

Sample Input

3
7
4 3 1 5 4 2 1
6
4 3 1 4 2 0
6
2 3 1 1 2 1

Sample Output

YES
0 1 0 1 1 0 1
1 0 0 1 1 0 0
0 0 0 1 0 0 0
1 1 1 0 1 1 0
1 1 0 1 0 1 0
0 0 0 1 1 0 0
1 0 0 0 0 0 0 NO YES
0 1 0 0 1 0
1 0 0 1 1 0
0 0 0 0 0 1
0 1 0 0 0 0
1 1 0 0 0 0
0 0 1 0 0 0

Source

#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node
{
int pos,x;
}c[15];//pos表示顶点坐标。x表示顶点的度
bool cmp(node a,node b)
{
return a.x>b.x;
}
int main()
{
int ncase,n,edge[15][15];//edge是否存在合理的相邻关系
scanf("%d",&ncase);
while(ncase--)
{
int flag=0;
memset(edge,0,sizeof(edge));
memset(&c,0,sizeof(&c));
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&c[i].x);
c[i].pos=i;
if(c[i].x>=n)
flag=1;
}
if(flag)
{
printf("NO\n");
continue;
}
int first_pos,first_x;
for(int i=0;i<n;i++)
{
sort(c+i,c+n,cmp);//排序。c+i,c+n各自是数组開始,结束地址
first_x=c[i].x;
first_pos=c[i].pos;
for(int k=1;k<=first_x&&!flag;k++)
{
int j=c[i+k].pos;
if(c[i+k].x<=0) flag=1;
c[i+k].x--;
edge[j][first_pos]=edge[first_pos][j]=1;
}
}
if(!flag)
{
printf("YES\n");
for(int i=0;i<n;i++)
{
printf("%d",edge[i][0]);
for(int j=1;j<n;j++)
printf(" %d",edge[i][j]);
printf("\n");
}
}
else
printf("NO\n");
printf("\n");
}
return 0;
}

Havel-Hakimi定理(推断是否可图序列)的更多相关文章

  1. POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)

    题意 题目链接 \(T\)组数据,给出\(n\)个点的度数,问是否可以构造出一个简单图 Sol Havel–Hakimi定理: 给定一串有限多个非负整数组成的序列,是否存在一个简单图使得其度数列恰为这 ...

  2. HDU 2454 Degree Sequence of Graph G(Havel定理 推断一个简单图的存在)

    主题链接:pid=2454">http://acm.hdu.edu.cn/showproblem.php?pid=2454 Problem Description Wang Haiya ...

  3. Havel--Hakimi定理推断可图化 python

    介绍: 哈维尔[1955]--哈吉米[1962]算法能够用来判读一个度序列d是否是可图化的. 哈维尔[1955]--哈吉米[1962]定理: 对于N > 1,长度为N的度序列d可以可图化当且仅当 ...

  4. POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 41 ...

  5. Codeforces 1091E New Year and the Acquaintance Estimation Erdős–Gallai定理

    题目链接:E - New Year and the Acquaintance Estimation 题解参考: Havel–Hakimi algorithm 和 Erdős–Gallai theore ...

  6. POJ1659 Frogs' Neighborhood(Havel定理)

    给一个无向图的度序列判定是否可图化,并求方案: 可图化的判定:d1+d2+……dn=0(mod 2).关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环. 可简单图化的判定(Have ...

  7. Havel定理

    先贴一个百度百科的注释 Havel定理编辑 本词条缺少概述.名片图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 中文名 Havel定理 外文名 Canisters theorem 特    ...

  8. LD1-M(简单图的判定+构造,Havel定理)

    题目链接 /* *题目大意: *给出一个图的每个点的度的序列,求能否构成一个简单图,如果能构出简单图,则输出图的邻接矩阵; * *算法思想: *Havel定理的应用; *给定一个非负整数序列{dn}, ...

  9. cdoj913-握手 【Havel定理】

    http://acm.uestc.edu.cn/#/problem/show/913 握手 Time Limit: 2000/1000MS (Java/Others)     Memory Limit ...

随机推荐

  1. An error occured while handling a json request

    修复方法: sudo pip install werkzeug==0.8.3

  2. hibernate list和iterate

    list方法会一次查出所有内容,放在list里和缓存中.再次查询同一内容仍然会去数据库重新查一遍,并刷新缓存. iterate方法会一次查出所有内容的ID,等用到某个ID对应的内容时又会去根据主键查询 ...

  3. xcode7 断点失效

    今天下了个别人的demo,运行发现断点不起作用,开始以为是xcode7的问题,因为自升级到xcode7后没怎么用,但后来尝试其它项目,发现是可以断点的,所以才认定不是xcode的问题,而是项目配置的问 ...

  4. windows server 2008 桌面图标

    1.开始-->"搜索"-->"icon"-->"显示桌面通用图标"

  5. Eclipse添加中文语言包与下载

    从Eclipse官网下载最新版本的Eclipse都是英文版的,不自带语言包.现在Eclipse有一个语言包项目,叫Eclipse Babel Project.如果需要语言包,可以联机从这儿下载. Ba ...

  6. 代码覆盖率?coverage

    http://www.infoq.com/cn/articles/test-coverage-rate-role 代码覆盖率?coverage   http://www.cnblogs.com/cod ...

  7. Spring Aop基础总结

    什么是AOP: Aop技术是Spring核心特性之中的一个,定义一个切面.切面上包括一些附加的业务逻辑代码.在程序运行的过程中找到一个切点,把切面放置在此处,程序运行到此处时候会运行切面上的代码.这就 ...

  8. makefile之变量

    1 变量的定义 A variable is a name defined in a makefile to represent a string of text, called the variabl ...

  9. [转]C++ error C2011: “XXX”:“class”类型重定义

    http://blog.csdn.net/m_leonwang/article/details/27678219 尝试修复这个程序的错误: 点击下载源代码文件夹

  10. linux学习笔记24---命令grep

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是global search regular expression(RE) and ...