Frogs' Neighborhood

 

http://poj.org/problem?id=1659

题意: 输入每个点的度 要用邻接矩阵输出可能的图

havel 定理

 

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct node{int x;int w;}no[10000];
int p[1002][1002],n;
int cmp(node a,node b)
{
    return a.w>b.w;
}

int solve()
{
    int j,i,k;
    for(i=0;i<n;i++)
    {
        sort(no+i,no+n,cmp);
        if(no[i].w>n-i-1)
            return -1;
        for(j=i+1;j<no[i].w+i+1&&j<n;j++)
        {
            no[j].w--;
            if(no[j].w<0)
                return -1;
            p[no[i].x][no[j].x ]=p[no[j].x][no[i].x]=1;
        }
    }
    return 0;
}

int main()
{
    int i,j,m,t,flag=0;
    scanf("%d",&t);
    for(int k=0;k<t;k++)
    {

        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&no[i].w);
            no[i].x=i;
        }
        memset(p,0,sizeof(p));
        if(flag==0)
            flag=1;
        else printf("\n");
        if(solve()==-1)
            printf("NO\n");
        else 
        {
            printf("YES\n");        
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                    printf("%d ",p[i][j]);
                printf("\n");
            }
        }
        
    }
    return 0;
}

 

posted @ 2013-08-05 12:06  galaxy77  阅读(226)  评论(0编辑  收藏  举报