技术心得记录:关于自补图的认识和构造(无证明)

简介: 技术心得记录:关于自补图的认识和构造(无证明)

自补图的定义: 原图为G , 补图为H (H是在G的完全图上面去掉关于G图的边得到的新图),G和H为同构


同构的定义:


关于图的同构(Isomorphic),最简单的例子就是五边形和五角星了:


上图中,G1和G2为同构的,因为:


从G1的结点到G2的结点,存在一个一对一的映上函数 f (one - to - one and onto function f )


从G1的边到G2的边,存在一个一对一的映上函数 g (one - to - one and onto function g )


G1中,边e1与结点a,b相关联,当且仅当(if and only if) G2中边 g(e) 与结点 f(a) 和 f(b) 相关联(E1和结点A,B相关联)。若满足此条件,函数 f 和 g 称为从G1到G2的同构映射(Isomorphism)


2. 判断两图同构


对于某个顺序,如果两个图是同构的,则两个图的邻接矩阵是相同的:


这两个矩阵对应的是上面的两个图


链接:


题目:给出n给个点,判断是否可以构造出自补图 ,可以就输出补图的矩阵,于补图点于原点的对应


原图与补图边数要一样,所以当n=4k+2和4k+3时无解


当n=4k 时 将点分成4部分P1,P2,P3,P4 前两部分P1P2所有的点两两连边组成团,P3P1部分与部分之间两两连边,P4P2部分与部分之间两两连边


它的补图 是 P3P4组成团,P4P1之间连边,P3P2之间连边,与原图是同构的。


块之间映射关系,原图 P1P2P3P4 补图P3P4P2P1或其他方案。


当n=4k+1时 剩下一个点随便和两个块连就好了。


图片出场:


#include


using namespace std;


int n,a【2500】【2500】;


void fuck1(int n){


///p1,p2两两全部相连


for (int i = 1; i <= n/2;i++){


for (int j = i+1; j <= n/2;j++){


a【i】【j】=1;


a【j】【i】=1;


}


}


///p1,p3部分相连 p2,p4部分相连


for (int i = 1; i <= n/4;i++){


for (int j = 1; j <= n/4;j++){


a【i】【n/2+j】=1;


a【n/2+j】【i】=1;


}


}


for (int i = n/4+1; i <= n/2;i++){


for (int j = n/4+1; j <= n/2;j++){


a【i】【n/2+j】=1;


a【n/2+j】【i】=1;


}


}


}


void fuck2(int n){


for (int i = 1; i <= n/2;i++){


a【n】【i】=1;


a【i】【n】=1;


}


n--;


for (int i = 1; i <= n/2;i++){


for (int j = i+1; j <= n/2;j++){


a【i】【j】=1;


a【j】【i】=1;


}


}


for (int i = 1; i <= n/4;i++){


for (int j = 1; j <= n/4;j++){


a【i】【//代码效果参考:http://www.lyjsj.net.cn/wx/art_23781.html

n/2+j】=1;

a【n/2+j】【i】=1;


}


}


for (int i = n/4+1; i <= n/2;i++){


for (int j = n/4+1; j <= n/2;j++){


a【i】【n/2+j】=1;


a【n/2+j】【i】=1;


}


}


}


void print(int n){


for (int i = 1; i <= n;i++){


for (int j = 1; j <= n;j++){


printf("%d",a【i】【j】);


}


puts("");


}


if(n==1){


printf("1\n");


return;


}


int x=n;


if(n&1) n--;


for (int i = n; i >= n/2+1;i--){


if(i==n) printf("%d",i);


//代码效果参考:http://www.lyjsj.net.cn/wz/art_23779.html

else printf(" %d",i);

}


for (int i = 1; i <= n/2;i++){


printf(" %d",i);


}


if(x&1) printf(" %d\n",x);


else puts("");


}


int main()


{


int ; scanf("%d",&);


for(int cas=1 ; cas<=_ ; cas++){


scanf("%d",&n);


printf("Case #%d: ",cas);


if(n%4==2||n%4==3)


{


puts("No");


continue;


}


puts("Yes");


for(int i=1 ; i<=n ; i++)


for(int j=1 ; j<=n ; j++) a【i】【j】=0;


if(n%4==0)


{


fuck1(n);


print(n);


}


else


{


fuck2(n);


print(n);


}


}


}


View Code

相关文章
|
存储 Oracle 搜索推荐
电子商务中数据库的应用以及选择
【4月更文挑战第10天】电子商务依赖数据库进行数据存储与管理,涵盖产品信息、订单、用户数据。数据库支持数据分析,揭示市场趋势,助力企业决策。在客户关系管理中,数据库帮助理解客户行为,实现个性化服务。订单处理也离不开数据库,确保操作准确高效。数据库系统如MySQL、Oracle满足不同业务需求,选择时要考虑性能、规模及管理特性。合适的数据库对电商业务的性能和稳定性至关重要。
612 4
|
Web App开发 Ubuntu Android开发
亚马逊AWS Kinesis Video Streams with WebRTC demo示例
以下分步说明介绍如何使用下载、构建和运行 Kinesis Video Streams with WebRTC 开发工具包及其相应示例。
1000 0
|
存储 NoSQL 关系型数据库
|
3月前
|
并行计算 安全 测试技术
H100 真的被封印了吗?我用 vLLM+FP8 把吞吐拉爆了
H100未被封印!通过vLLM+FP8量化,实现Llama-3-8B推理吞吐提升60%,并发能力飙升5倍。利用PagedAttention与FP8 KV Cache,显存效率跃升,单卡承载达千级请求,实测60 QPS为稳定服务红线,为大模型生产部署提供高性能、低成本新范式。
388 0
H100 真的被封印了吗?我用 vLLM+FP8 把吞吐拉爆了
|
Go 开发工具 git
【git】解决:Failed to connect to 127.0.0.1 port 7890: Connection refused
【git】解决:Failed to connect to 127.0.0.1 port 7890: Connection refused
4834 0
|
存储 C语言
【数据结构】顺序表(c语言实现)(附源码)
本文介绍了线性表和顺序表的基本概念及其实现。线性表是一种有限序列,常见的线性表有顺序表、链表、栈、队列等。顺序表是一种基于连续内存地址存储数据的数据结构,其底层逻辑是数组。文章详细讲解了静态顺序表和动态顺序表的区别,并重点介绍了动态顺序表的实现,包括初始化、销毁、打印、增删查改等操作。最后,文章总结了顺序表的时间复杂度和局限性,并预告了后续关于链表的内容。
506 3
|
开发工具 git
完美解决 fatal: unable to access ‘https://github.com/.../.git‘: Could not resolve host: github.com
完美解决 fatal: unable to access ‘https://github.com/.../.git‘: Could not resolve host: github.com
36239 1
|
机器学习/深度学习 IDE 数据挖掘
使用VScode的几点感受,对比Pycharm、Jupyter优劣势
使用VScode的几点感受,对比Pycharm、Jupyter优劣势
1830 5
|
人工智能 安全 物联网
物联网在智能家居中的应用:技术革新与未来展望
【7月更文挑战第3天】物联网在智能家居中推动技术革新,整合智能安防、照明、家电控制及语音助手,提升生活便捷与节能。未来,设备间互联将加强,AI融合优化用户体验,安全隐私保护技术升级,云端服务支持远程管理,预示智能家居更智能、个性化的发展趋势。
1285 3
|
人工智能 程序员
专业程序员进阶之路:从需求出发
在软件开发中,需求管理是关键,尤其对程序员的成长至关重要。文章以AI智能回收机项目为例,揭示了混乱、不清晰的需求如何阻碍项目进展。需求是设计的基础,没有正确需求意味着设计错误。程序员往往无形中承担了部分需求分析工作,需学会从用户角度理解和控制需求。需求过程包括问题定义和需求分析,前者清晰陈述问题,后者侧重业务而非技术。正确接收需求需深入业务、挖掘本源、全面考虑需求关系。通过学习和实践,程序员能提升需求管理能力,进而专业进阶。
474 1

热门文章

最新文章