POJ 1659 Frogs' Neighborhood

来源:互联网 发布:matlab软件下载lvsexz 编辑:程序博客网 时间:2024/04/28 16:49

就是给出无向图的度序列,判断是否能构成一个图。

基本就是按照定理来,知道定理就能做。

PS:清明回老家,火车上做的。准备一个月把图论这本书看完。

//POJ 1659//能否构成图#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<algorithm>using namespace std;int g[11][11];struct lx{    int a,i;}e[20];bool cmpa(lx a,lx b){    if(a.a==b.a)    return a.i>b.i;    else    return a.a>b.a;    /*    return a.a>b.a;    */}int build(int n){    sort(e,e+n,cmpa);    int tmp=e[0].a;    if(tmp==0)return 1;    e[0].a=0;    for(int i=1;i<=tmp;i++)    {        if(e[i].a==0)return 0;        e[i].a--;        g[e[0].i][e[i].i]=1,g[e[i].i][e[0].i]=1;    }    return build(n);}int main(){    int t,n;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(int i=0;i<n;i++)        {            scanf("%d",&e[i].a);            e[i].i=i;        }        memset(g,0,sizeof(g));        if(!build(n))puts("NO");        else        {            puts("YES");        for(int i=0;i<n;i++)        {            int j;            for(j=0;j<n-1;j++)            printf("%d ",g[i][j]);            printf("%d\n",g[i][j]);        }        }    printf("\n");    }}


0 0