POJ-1659-Frogs' Neighborhood

这个题根据Havel-Hakimi定理中的方法进行判断,然后直接模拟就行了~

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=11;
struct node
{
    int val;
    int index;
    bool operator < (const node& a)const
    {
	return val>a.val;
    }
}a[maxn];
int n,ans[maxn][maxn];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
	memset(ans,0,sizeof(ans));
	scanf("%d",&n);
	int len=n-1;
	for(int i=0;i<n;i++)
	{
	    scanf("%d",&a[i].val);
	    a[i].index=i+1;
	}
	sort(a,a+n);
	int flag=0;
	for(int i=0;i<n;i++)
	{
	    for(int j=1;j<=a[0].val&&j<=len;j++)
	    {
		ans[a[0].index][a[j].index]=1;
		ans[a[j].index][a[0].index]=1;
		a[j].val--;
	    }
	    swap(a[0],a[len--]);
	    sort(a,a+len+1);
	    for(int j=0;j<=len;j++)
		if(a[j].val<0)
		{
		    flag=1;
		    break;
		}
	    if(flag)
		break;
	}
	if(flag)
	{
	    printf("NO\n");
	    printf("\n");
	    continue;
	}
	printf("YES\n");
	for(int i=1;i<=n;i++)
	    for(int j=1;j<=n;j++)
		printf("%d%c",ans[i][j],j==n?'\n':' ');
	printf("\n");
    }
    return 0;	
}


你可能感兴趣的:(Havel-Havkimi)