您的位置:首页 > 其它

poj1659 Havel-hakimi定理

2013-04-10 22:21 330 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: