#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 15
struct vertex
{
int degree;
int index;
} v[N];
int cmp(const void *a,const void *b)
{
return (((struct vertex*)b)->degree) -( ((struct vertex*)a)->degree);
}
int main()
{
int r,k,p,q;
int i,j;
int d1;
int T,n;
int Edge[N][N],flag;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&v[i].degree);
v[i].index=i;
}
memset(Edge,0,sizeof(Edge));
flag=1;
for(k=0;k<n&&flag;k++)
{
qsort(v+k,n-k,sizeof(struct vertex),cmp);
i=v[k].index;
d1=v[k].degree;
if(d1>n-k-1) flag=0;
for(r=1;r<=d1&&flag;r++)
{
j=v[k+r].index;
if(v[k+r].degree<=0) flag=0;
v[k+r].degree--;
Edge[i][j]=Edge[j][i]=1;
}
}
if(flag)
{
puts("YES\n");
for(p=0;p<n;p++)
{
for(q=0;q<n;q++)
printf("%d ",Edge[p][q]);
printf("\n");
}
puts("\n");
}
else puts("No");
}
return 0;
}
青蛙的邻居
最新推荐文章于 2017-01-11 21:25:00 发布