poj 1659 Frogs' Neighborhood
题目链接:http://poj.org/problem?id=1659
知识扩展:(Havel-Hakimi 定理)由非负整数组成的非增序列 s: d1, d2, ··· , dn (n≥2, d≥1) 是可图的,当且仅当序列 s1 : d2-1, d3-1, ··· , dd1+1-1, dd1+2, ··· , dn 是可图的。序列 s1 中有 n-1 个非负整数,s 序列中 d1 后的前 d1 个度数(即 d2~dd1+1)减 1 后构成 s1 中的前 d1 个数。
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 5 struct Edge{ 6 int id,deg; 7 bool operator <(const Edge& E) const{ 8 return deg>E.deg; 9 } 10 }e[10]; 11 12 int main(){ 13 int t,n,i,j,a[10][10]; 14 cin>>t; 15 while(t--){ 16 cin>>n; 17 for(i=0;i<n;i++){ 18 for(j=0;j<n;j++) a[i][j]=0; 19 } 20 for(i=0;i<n;i++){ 21 cin>>e[i].deg; 22 e[i].id=i; 23 } 24 bool flag=true; 25 i=0; 26 while(flag){ 27 sort(e+i,e+n); 28 if(e[i].deg==0) break; 29 for(j=i+1;j<=i+e[i].deg;j++){ 30 if(e[j].deg-1>=0){ 31 a[e[i].id][e[j].id]=a[e[j].id][e[i].id]=1; 32 e[j].deg--; 33 } 34 else{ 35 flag=false; 36 break; 37 } 38 } 39 i++; 40 } 41 if(!flag) cout<<"NO"<<endl; 42 else{ 43 cout<<"YES"<<endl; 44 for(i=0;i<n;i++){ 45 for(j=0;j<n-1;j++) cout<<a[i][j]<<" "; 46 cout<<a[i][n-1]<<endl; 47 } 48 } 49 if(t>0) cout<<endl; 50 } 51 return 0; 52 }
posted on 2013-05-31 20:24 SCNU20102200088 阅读(166) 评论(0) 编辑 收藏 举报