Havel-Hakimi定理的方法来构图
给定一组非负数字,(数字为节点的度),判断该组数字能不能构成图。
Havel-Hakimi定理:
将序列按照从大到小排序之后,从第二个数开始到第一个数的长度+1为止,依次减1。每操作一次,删掉第一个数字。直到整个数组被删完都没有-1出现。则可图。
按照这个定理,我们可做的操作如下:
1.排序
2.先判断第一个数的度是否大于序列-1的长度,如果大于则非图。
如果小于等于,则后面的数依次减1.小于0,则跳出。
3.存图:循环过程中,如果能减1,则第一个数之后的id都指向第一个数。
实例:
3 1 2 1 1
第一次:3 2 1 1 1 删掉3,后面依次减1
得:1 0 0 1
第二次:1 1 0 0.删掉1,后面依次减1
得:0 0 0
所以可图
代码如下:
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct {
int id;
int d;
}Arg; Arg arg[];
int ans[][]; int cmp(const void *a,const void *b){
return ((Arg*)b)->d-((Arg*)a)->d;
}//从大到小 int main(){
int t,n;
cin>>t;
while(t--){
cin>>n;
memset(ans,,sizeof(ans));//每一次,将数组置0
for(int i=;i<n;i++){
cin>>arg[i].d;
arg[i].id=i;
}
int k=,i,j;
while(k<n){
qsort(arg+k,n-k,sizeof(arg[]),cmp);//第一次排序后,每次删除第一个数排序
if(arg[k].d>n-k-)
break;//如果当前度数已经大于后面的长度,这说明不可能是图
for(i=;i<=arg[k].d;i++){//次数 if(arg[i+k].d<=)//小于0跳出
break;
arg[i+k].d--;
ans[arg[k].id][arg[k+i].id]=ans[arg[k+i].id][arg[k].id]=;//将后一个数的id,指向前一个数
}
if(i<=arg[k].d)//中途跳出
break;
k++;
}
if(k<n)//没有删完,就跳出了
cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
for(i=;i<n;i++){
for( j=;j<n;j++)
cout<<ans[i][j]<<" ";
cout<<endl;
}
} }
return ;
}
Havel-Hakimi定理的方法来构图的更多相关文章
- POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)
题意 题目链接 \(T\)组数据,给出\(n\)个点的度数,问是否可以构造出一个简单图 Sol Havel–Hakimi定理: 给定一串有限多个非负整数组成的序列,是否存在一个简单图使得其度数列恰为这 ...
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9897 Accepted: 41 ...
- POJ 1659 Havel-Hakimi定理
关于题意和Havel-Hakimi定理,可以看看http://blog.csdn.net/wangjian8006/article/details/7974845 讲得挺好的. 我就直接粘过来了 [ ...
- poj 1659 Frogs' Neighborhood( 青蛙的邻居)
Frogs' Neighborhood Time Limit: 5000MS Memory Limit: 10000K Total Submissions: 9639 Accepted: 40 ...
- Havel-Hakimi定理(推断是否可图序列)
给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一相应.则称此序列可图化.进一步.若图为简单图,则称此序列可简单图化 至于能不能依据这个序列构造一个图,就须要依据Havel-H ...
- 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 ...
- 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析
一.期末考试成绩班级前十名 宁盛臻(100).朱民哲(92).徐钰伦(86).范凌虎(85).沈伊南(84).何陶然(84).丁知愚(83).焦思邈(83).董瀚泽(82).钱信(81) 二.总成绩计 ...
- Kolmogorov复杂性
原文-wiki 看Kolmogorov复杂性看到云里雾里,于是干脆把wiki上的翻译了一下. [toc] Chaitin complexity, algorithmic entropy, progra ...
- 现代控制理论习题解答与Matlab程序示例
现代控制理论习题解答与Matlab程序示例 现代控制理论 第三版 课后习题参考解答: http://download.csdn.net/detail/zhangrelay/9544934 下面给出部分 ...
随机推荐
- css浮动(float)全方位案例解析
前言 浮动最早的使用是出自<img src="#" align="right" />,用于文本环绕图片的排版处理.当然也是一种常用的布局方式. fl ...
- Beamer 目录分栏
导言区加入 \usepackage{multicol} 然后 \section*{目录} \frame{\begin{multicols}{} \tableofcontents[hideallsubs ...
- H5取经之路——添加hover实现特定效果
一.鼠标指上后显示二维码,效果图如下: 鼠标未指上时: 鼠标指上后: 代码如下: .div1 .li2 .code_wexin{ width: 0px; height: 0px; position: ...
- hibernate之SessionFactory对象
Factory --- 工厂 利用Configuration得到 hibernate3.版本 SessionFactory factory = Configuration.buildSessionFa ...
- ModuleNotFoundError: No module named '_sqlite3' -- python2.7 问题
ModuleNotFoundError: No module named '_sqlite3' 运行python 工程出现上面这个问题,以为python安装中缺少这个依赖, 注python 2.7 首 ...
- Selective Search for Object Recognition(理解)
0 - 背景 在目标检测任务中,我们希望输入一副图像,输出目标所在的位置以及目标的类别.最常用的算法是滑动窗口方法,但滑动窗口其实相当于穷举图像中的所有子图像,其效率低且精度也受限.该论文提出一种新的 ...
- Illegal invocation with document.querySelector [duplicate]
document.querySelectorAll赋给其它变量时, 为什么要.bind(document)? https://stackoverflow.com/questions/12637061/ ...
- css clip-path的polygon属性绘制多边形
通过设置多个点的坐标位置来绘制图形的形状 .box{ clip-path:polygon(x1 y1, x2 y2, x3 y3, , , , , ,) backgroud-color:red; }
- linux下安装redis并开机自启动
分享一个博客地址, 写的太好了, 满满的都是干货 ! https://www.cnblogs.com/renzhicai/p/7773080.html
- .net core 2.x - 日志 - to elasiticsearch
记录日志到elasticsearch(es),下面简写es,然后我们可以通过kibana可视化的观察日志信息以及统计分析等. 1.起源 年中旬时候,公司有个需求是需要分析用户的地址,需要先分词处理然后 ...