题意:在一个无相图中有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;
}
本文介绍了一种使用贪心算法解决无相图问题的方法,通过模拟每次加入点所带来的影响来确定图的构建过程。重点在于确保图的节点数不超过100,并输出符合要求的图结构。

197

被折叠的 条评论
为什么被折叠?



