对于图的所有顶点,计算出每个顶点的度,度序列。给定一个序列判断序列是否可图。
#include<cstdio> #include<algorithm> #include<cstring> using namespace std; int map[15][15]; struct vertext { int d; int num; }x[15]; bool cmp(vertext a,vertext b) { return b.d<a.d; } int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); memset(map,0,sizeof map); for(int i=0;i<n;i++) { scanf("%d",&x[i].d); x[i].num=i; } sort(x,x+n,cmp); int flag=0; for(int i=0;i<n;i++) { sort(x+i,x+n,cmp); if(x[i].d>n-i-1) { flag=1;break; } for(int j=i+1;j<=i+x[i].d;j++) { map[x[i].num][x[j].num]=map[x[j].num][x[i].num]=1; x[j].d--; if(x[j].d<0) { flag=1;break; } } if(flag==1) break; x[i].d=0; } if(x[n-1].d!=0) flag=1; if(flag==0) { printf("YES\n"); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { printf("%d",map[i][j]); if(j!=n-1) printf(" "); } printf("\n"); } } else printf("NO\n"); if(t!=0) printf("\n"); } return 0; }
时间: 2024-10-09 14:12:19