poj 1659 (havel定理)
2012-07-10 01:07
134 查看
haval定理:(转) Havel算法的思想简单的说如下: (1)对序列从大到小进行排序。 (2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后(不包括自己)的 t 个度数分别减1(意思就是把度数最大的点与后几个点进行连接) (3)如果序列中出现了负数,证明无法构成。如果序列全部变为0,证明能构成,跳出循环。前两点不出现,就跳回第一步! 自己的代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <stack> #include <algorithm> #include <vector> using namespace std; const int N=15; int map ; int n; struct Node { int num; int id; }node ; bool cmp(Node a,Node b) { return a.num>b.num; } int main() { int cas; cin>>cas; while(cas--) { memset(map,0,sizeof(map)); cin>>n; for(int i=0;i<n;i++) { cin>>node[i].num; node[i].id=i+1; } int t; int flag=1; for(int i=0;i<n-1;i++) { sort(node,node+n,cmp); int tmp=node[0].num; t=node[0].id; node[0].num=0; if(flag) for(int j=1;j<=tmp;j++) { int v=node[j].id; node[j].num--; map[t][v]=map[v][t]=1; if(node[j].num<0) { flag=0; break; } } t++; } if(flag) { cout<<"YES"<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<map[i][j]<<' '; } cout<<endl; } cout<<endl; } else cout<<"NO"<<endl<<endl;; } return 0; }
相关文章推荐
- POJ 1659 Frogs' Neighborhood 可图性判断-Havel定理
- 【Havel定理判断可图化】POJ 1659
- poj 1659 Frogs' Neighborhood(Havel定理求度序列是否成图)
- POJ 1659 Frogs' Neighborhood (havel定理)
- POJ1659 Frogs' Neighborhood(Havel定理)
- poj-1659-Frogs' Neighborhood-havel定理
- POJ - 1659 Frogs' Neighborhood 【Havel定理可图化】
- (度序列) poj 1659
- 可图性判定—Havel-Hakimi定理(POJ 1659)
- poj-1659-Frogs' Neighborhood-图论-Havel-Hakimi定理-java
- POJ 1659 Frogs' Neighborhood(Havel_Hakimi定理,图论基础)
- poj 1659 Frogs' Neighborhood havel定理
- POJ 1659 Frogs’ Neighborhood
- POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
- pku 1659 (Havel定理)
- poj 1659 Frogs' Neighborhood (判断简单图并输出)
- poj 1659 Havel-Hakimi定理(图解序列能否成图)
- poj 1659 Frogs' Neighborhood 图论基础 可图性
- POJ:1659Frogs' Neighborhood
- POJ-1659 Frogs' Neighborhood