zoukankan      html  css  js  c++  java
  • poj 1659 判断是否能构成图Havel-Hakimi定理

    //用到了Havel-Hakimi定理,判断是否能够构图
    //两种情况不能构图,1:对剩下序列排序后,最大的度数超过了剩下的顶点数
    //                  2:对最大的度数后面的f个度数减-后,出现了负数
    //记录到临街矩阵只需要每次排序后减-记录。
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define N 20
    struct node
    {
        int u,index;
    } a[N];
    int ma[N][N];
    int cmp(const void *a,const void *b)
    {
        return (*(struct node *)b).u-(*(struct node *)a).u;
    }
    int main()
    {
        int t,n,i,j,flag,to,index;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(i=0; i<n; i++)
            {
                scanf("%d",&a[i].u);
                a[i].index=i+1;
            }
            flag=1;
            memset(ma,0,sizeof(ma));
            for(i=0; i<n&&flag; i++)
            {
                qsort(a+i,n-i,sizeof(a[0]),cmp);
                to=a[i].u;
                index=a[i].index;
                if(to>n-i-1)flag=0;
                for(j=i+1; j<n&&flag; j++)
                {
                    if(to==0)break;
                    if(a[j].u<=0)flag=0;
                    a[j].u--;
                    to--;
                    ma[index][a[j].index]=ma[a[j].index][index]=1;
                }
            }
            if(flag==0)
                printf("NO
    ");
                else  {
            printf("YES
    ");
            for(i=1; i<=n; i++)
            {
                for(j=1; j<=n-1; j++)
                    printf("%d ",ma[i][j]);
                printf("%d
    ",ma[i][j]);
            }
                }
            if(t)
                printf("
    ");
        }
        return 0;
    }
    

  • 相关阅读:
    Bootstrap-CL:警告
    Bootstrap-CL:略缩图
    Bootstrap-CL:页面标题
    Bootstrap-CL:超大屏幕
    Bootstrap-CL:徽章
    Bootstrap-CL:标签
    Bootstrap-CL:分页
    Bootstrap-CL:面包屑导航
    Bootstrap-CL:导航栏
    Bootstrap-CL:导航元素
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410630.html
Copyright © 2011-2022 走看看