#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int T;
int N;
typedef struct
{
int degree;
int index;
}vertex;
vertex vertexes[11];
int G[11][11];
bool flag;
int cmp(const void *a,const void *b)
{
return ((vertex*)b)->degree - ((vertex*)a)->degree;
}
int main()
{
cin>>T;
while(T--)
{
cin>>N;
for(int i = 0; i < N; i++)
{
cin>>vertexes[i].degree;
vertexes[i].index = i;
}
memset(G,0,sizeof(G));
flag = true;
for(int k = 0; k < N && flag; k++)
{
qsort(vertexes + k, N - k, sizeof(vertex),cmp);
int x = vertexes[k].index;
int deg = vertexes[k].degree;
if(deg > N - k - 1)
flag = false;
for(int r = 1; r <= deg && flag; r++)
{
int y = vertexes[k + r].index;
if(vertexes[k + r].degree <= 0)
{
flag = false;
}
vertexes[k + r].degree --;
G[x][y] = G[y][x] = 1;
}
}
if(flag)
{
cout<<"YES"<<endl;
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if(j)
{
cout<<" ";
}
cout<<G[i][j];
}
cout<<endl;
}
}
else
{
cout<<"NO"<<endl;
}
if(T)
cout<<endl;
}
return 0;
}
poj1659 Havel-hakimi定理
最新推荐文章于 2018-11-10 16:34:07 发布