判断图是否为二分图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图二的分割
1 4
8
7 6
2 3
5
图三
1 3 2 4
7 6 5
图四
1
3
7 5
2
4
6
4 7 3 2
图五的分割
6.结论
经测试,得到以下结果: 1. 取若干的图进行测试,可以人工染色得出是否为二分图,再跟程序运行结果对比, 可以验证程序的正确性,可以发现本程序是正确的。 2. 其实进一步我们可以发现只要图中有奇数个节点组成的环,那么就不会是二分图。
2.解决方案
用广度优先搜索算法对给定的图进行遍历,对相邻节点进行黑白着色(白色染 0,黑色 为 1) ,如果最后程序结束时,相邻节点的颜色都不同,则是二分图,且同一颜色的节点属 于同一集合,只有黑白二色,故原来的节点被分成两个集合 A、B, (A,B)即为原来图的一 个分割。若着色过程中出现矛盾,即原本已经染为白色,下次搜索到时却应该染成黑色,或 者相反情况,此时则不是二分图。 可以证明此种方法可以版定二分图,并且给出一个分割。反证,因为如果(A,B)不是二 分图的一个分割,则存在同一个集合中的两个元素,这两个顶点之间存在边连接,那么根据 算法这两个顶点颜色不同,然而另一方面,这两个顶点在一个集合中,颜色必然相同,由此 得出矛盾。所以假设不成立,所以这是个二分图,并且(A,B)是此二分图的一个分割。 效率分析:计算复杂度就是广度优先搜索算法(BFS)的复杂度,为 O(V+E) 。
5.测试结果
输入各种图,运行程序判断是否为二分图,通过运行程序,可以得到各种图是否
为二分图,见表一。如果是二分图,可以得到一个分割,见二分图的下方。
图 是否二分图 图1 是 图2 是 图3 否 图4 否 图5 是
1
3
5
图一:
图一
A
B
1 3 5
2
4
图一的分割
1 3 2 4
图二
5 7
6
A
B
1 7 6 4 5 3 2
3.实现要点
实现要点有两个,一个是编程实现广度优先搜索算法,那么黑白染色就不成问题,给出 分割也是染色结束即可得到的;另一个是将图生成相应的数据结构进行存储。
4.测试环境与数据
测试环境选用实验室的台式电脑,电脑参数为:cpu2 个,内存:3.42G (计算时只用 一个 cpu) ,2 核,4 个线程,一级数据缓存32 × 2K,一级指令缓存32 × 2K。数据由自己随 便画出若干个图,进行测试。
目录: 题目 作者 1.问题 2.解决方案 3.实现要点 4.测试环境与数据 5.测试结果 6.结论 7.选做题
1.问题:
1、 设计一个算法计算一个无向图图 G=(V,E)是否二分图, 如果是给出 V 的一个分割(A,B), 即二分图的两个部分对应的点集。 自己设计若干图例验证你算法的正确性和计算效率, 分析 是否和理论分析吻合。