给定一个非负整数序列{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 NOYES
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

POJ Monthly--2004.05.15 Alcyone@pku
#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");}}elseprintf("NO\n"); printf("\n");}return 0;
}

Havel-Hakimi定理(判断是否可图序列)相关推荐

  1. Havel—Hakimi定理(度序列)

    对于图的所有顶点,我们可以统计出每个顶点的度.像这样的一串数字,我们称之为:度序列.那么反过来,给定一个序列,能否判断这个序列是可图的呢?这里有一个定理:Havel-Hakimi定理可以用来判定一个序 ...

  2. Havel–Hakimi算法学习笔记(哈维尔算法)详细【Python】

    问题 来源离散数学的图论中 第一个接触到的算法:Havel–Hakimi算法 (哈维尔算法) 判断一个非负序列是否为某无向简单图的度数列的方法(Pyhton代码) 前提提要 1.无向简单图 首先先了解 ...

  3. 费尔马小定理素数java_利用费马小定理判断素数

    今天听了ljss神犇的数论课,顿时感觉----我真的是太弱啦! 我只能稍微写一下我能听懂的部分orz 那么这就是今天我为数不多能听懂一点的之一......QAQ 首先先介绍今天的主角:费马小定理 -- ...

  4. 罗尔定理与零点定理判断实际应用与判断

    在最后一大题中常常会出现一些让我们证明等式成立的题目,在这呢,我也碰到了几道另我眼前一亮的证明题,题目对我来说,又是一种方法和思路,在这呢进行汇总方便日后复习与回顾. 目录 首先来吧!第一题! 第一题 ...

  5. Havel-Hakimi定理(判断一个度序列是否可图)

    1,Havel-Hakimi定理主要用来判定一个给定的序列是否是可图的. 2,首先介绍一下度序列:若把图 G 所有顶点的度数排成一个序列 S,则称 S 为图 G 的度序列. 3,一个非负整数组成的有限 ...

  6. 【图论】已知度数列情况下的简单无向图的判断方法

    感谢评论区大佬@goodloveyourlove补充的判断度数列是否能构成无向树的方法与例子. 关于度数列是否能构成无向树的判断方法可以移步至评论区. ======================== ...

  7. POJ1659 Frogs' Neighborhood(Havel定理)

    题目: Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9932   Accepted ...

  8. 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 ...

  9. 图的可视化问题、havel-hakimi算法、Erdős–Gallai定理

    图的可视化问题.havel-hakimi算法.Erdős–Gallai定理 简单无向图的可视化问题: 给定一个度数序列D={a1......an},a⊂Z+,aiD=\{a_1......a_n\}, ...

最新文章

  1. C#连接oracle的方式以及问题解决.
  2. func_num_args()
  3. 102. 最佳牛围栏【二分 / 思维 不错】
  4. ECSTORE 关于FILTER条件所代表的含义
  5. 人工智能过于发达可能将后患无穷
  6. python实现概率分布
  7. RHEL7安装ZABBIX 3.2
  8. elasticsearch集群搭建实例
  9. android button 图片不缩放,ImageButton如何让图片按比例缩放不被拉伸
  10. 运动目标跟踪(十九)--TLD
  11. A1075[PAT JUDGE] 好题
  12. 最详细的SAI笔刷设置教程,非常全面详细!
  13. 【娜家花园养花小记】
  14. docker部署springboot父子级项目+mysql+redis菜鸟教程
  15. 计算机鼠标左键的主要应用,鼠标的应用
  16. C语言——数组定义及使用
  17. 站内搜索引擎(ASP.NET)
  18. excel提取单元格内特定字符(字/词)前(后)的内容
  19. 商标注册流程,山东商标注册去哪好
  20. 古龙108将,喜欢古龙的来看啦

热门文章

  1. 电脑和电脑之间到底是如何通信的
  2. 不规格图片等比例展示---上下/左右留白
  3. aI_Challenger 机器翻译
  4. VUE渲染富文本编辑器内容
  5. jbod ugood 磁盘驱动状态_Win10扫描修复磁盘驱动器错误全攻略
  6. git中merge分支到master产生冲突
  7. 内网穿透工具--lanproxy
  8. TCP/IP五层模型详解
  9. 【python】(四)python常用数据结构
  10. 输入子系统代码内核代码分析