codeforces 232A Cycles 图论 贪心 思维

题意:在一个无相图中有N个长度为3 的回路,输出符合条件的图。注意此图的节点数不得超过100

做法:贪心手法。点最多一百个,那么,要让每个点的作用都发挥出来。所有,可以模拟每次加入点所带来的影响,来确定,两个点是否要连接。

#include <iostream>
#include<cstdio>
using namespace std;
int c[103],have[103],ans,k,ss;
bool gra[103][103];
int main()
{
    int n,i,j,k;
    scanf("%d",&n);
    gra[1][2]=gra[2][1]=1;
    for(i=3;i<=100;i++)//开始加入一个新点
    {
        for(j=1;j<i;j++)
        {
            ss=0;
            for(k=1;k<j;k++)//这两个循环是来确定回路中的另外两个点的
             if(gra[k][j]&&gra[k][i])ss++;//如果i,j相连所能得到 的回路
            if(n>=ss)
            {
                n-=ss;
                gra[i][j]=gra[j][i]=1;
            }
            if(n==0)break;
        }
        if(n==0)break;
    }
       n=i;
       printf("%d\n",n);
       for(i=1;i<=n;i++)
       {
           for(j=1;j<=n;j++)
           printf("%d",gra[i][j]);
           printf("\n");
       }
       return 0;
}


你可能感兴趣的:(codeforces 232A Cycles 图论 贪心 思维)