农夫过河问题

经典的农夫过河问题,相冲突的生物之间有连线,每次携带走某几个生物后,要保证剩下的没有连线存在。问船的容量最小是多少呢?

视频:【Numberphile】农夫过桥问题和阿尔昆数

直观的思路就是,找最少需要几只手盖住顶点后能消除所有连线(即最小覆盖):

但有时只有最小顶点覆盖个位置是不够的。

如下面的例子,最小顶点覆盖显然是1,把狼盖住就行了:

但船若只有1个额外位置是不行的,一个来回之后就卡住了:

这就需要再额外增加一个位置,也就是最小顶点覆盖数+1个位置。这时只要总是把狼带在身边,就能用剩下的位置一个个运送其它生物了。

所以最多只需要最小顶点覆盖数+1个位置,而有时只需最小顶点覆盖数个位置即可。关于确定什么时候需要+1是NP难的问题。

农夫过河问题可以归纳成顶点覆盖问题。下面引入顶点覆盖的具体概念,并与团和独立集作对比。

点覆盖 (vertex covering set)

设C ⊂ V (G) ,若 G 的每条边至少有一个端点属于 C,则称 C 是 G 的一个点覆盖。若对任给的v ∈C ,C −{v}不再是 G 的点覆盖,则称点覆盖 C 是一个极小点覆盖。图 G 的含点数最少的点覆盖称为最小点覆盖,其点数称为 G 的点覆盖数,记为 β (G) 或 β 。

C1 = {v0, v1, v3, v5, v7} 和 C2 = {v1, v2, v3, v4, v5, v6, v7, v8}都是G的点覆盖,且都是极小点覆盖。其中C1是最小点覆盖,β (G) =4。

团(clique)

设 K ⊂ V (G),若导出子图G[K] 是完全图(每对不同的顶点之间都恰连有一条边相连),则称 K 是 G 的一个团。若给团 K 添加V (G) \ K 中任何顶点,导出子图都不再是团,则称 K 是一个极大团。图 G 的含顶点数最多的团称为 G 的最大团,其顶点数称为 G 的团数,记为Cl(G) 。


k1 = {v0, v1, v2},k2 = {v0, v2, v3},k3={v0, v2, v3, v4}都是G的团。

其中k1是极大团,k2则不是。k3是G的最大团。

点独立集(vertex independent set)

设 I ⊆ V(G),若 I 中任二顶点均不相邻,则称 I 为图 G 的一个点独立集(简称独立集);若对∀u ∈V (G) \ I , I U {u}都不再是 G 的独立集,则称独立集 I 为图 G 的一个极大点独立集。G 的含点数最多的点独立集称为最大点独立集


I1 = {v0}, I2 = {v1, v4, v7},I3 = {v1, v3, v5, v7}都是G的独立集,且都是极大独立集。其中I3是最大独立集。

相互联系

对任意的无向图G=<V, E>和子集V’ ⊆ V,下面命题是等价的:

  1. V’是G的顶点覆盖
  2. V - V’ 是G的独立集
  3. V - V’ 是G补图的团

顶点覆盖和独立集是互补关系。顶点覆盖包含了所有连线,盖住后剩下的点之间就没有任何连线了,便形成了独立集。

独立集就是补图的团。独立集的点之间没有任何连线,在补图中就有所有连线,便形成了团。

从农夫过河问题理解顶点覆盖、团和独立集相关推荐

  1. c语言课程农夫过河问题实验心得,农夫过河实验报告

    <农夫过河实验报告>由会员分享,可在线阅读,更多相关<农夫过河实验报告(22页珍藏版)>请在人人文库网上搜索. 1.数据结构与算法综合实验"课程设计报告题目:农夫过河 ...

  2. 农夫过河问题(图结构)

    [题目介绍]:  所谓农夫过河问题是指农夫带一只狼.一只羊和一棵白菜在河南岸需要安全运到北岸.一条小船只能容下他和一件物品只有农夫能撑船.问农夫怎么能安全过河.  当然,狼吃羊,羊吃白菜,农夫不能将这 ...

  3. 图结构解决农夫过河问题(二附源代码)

    [什么是图结构]:图结构就是所有数据元素都可以连接,跟树结构有很大区别. 图结构包括两大部分: 1.顶点:所有的数据元素,每个元素就是一个顶点(数字1.2.3.4.5.6). 2.边:连接两个元素之间 ...

  4. 顺序队列模板简单应用算法设计:农夫过河(这个比较难,我自己都觉得难)

    文章目录 问题描述 : 输入说明 : 输出说明 : 输入范例 : 输出范例 : 思路分析 伪码实现 事故现场 第一次提交 分析与总结 如有不妥,或者疑问,请加扣扣651378276,一起商议学习进步 ...

  5. java数据结构 农夫过河,数据结构农夫过河

    农夫过河问题(C++编写)_电子/电路_工程科技_专业资料.1.问题描述从前,一... 农夫过河的安全步骤: NO1:农夫,狼,羊,白菜都在河的左岸 NO2:农夫带羊到... 南阳理工学院 " ...

  6. 农夫过河(基于C语言)

    文章目录 一.农夫过河问题简介 二.解题思路 三.代码实现 1. 物体编码 2. 获取物体的位置 3. 判断河岸两侧状态是否和平 4. 农夫运送过程(核心) 5. 完整代码 四.学习总结 五.参考资料 ...

  7. C语言位运算农夫过河,位运算常见操作和农夫过河问题(C++实现)

    二进制常见操作 二进制数中 1 的个数 解法 1 用 n & 1 判断最右边一位是否为 1,右移之后继续判断最右边一位,重复直到 n = 0.时间复杂度为 O(log2n) #include ...

  8. c语言课程农夫过河问题实验心得,农夫过河实验报告.docx

    农夫过河实验报告 "数据结构与算法综合实验"课程设计报告题目: 农夫过河问题学 院计算机科学技术年 级2014级专 业计算机科学与技术学 名高晗日 期2016年3月30日星期三成 ...

  9. c语言实现农夫过河问题,傻瓜式讲解,看不明白来打我

    农夫过河问题本站可以搜索到很多博客,笔者是初学c语言,功底不深,没能力创造源代码,只是看了一篇大佬的文章对该问题进行描述之后,产生了一点自己的想法,我想以我能理解的方式分享给许多初学c语言朋友们,笔者 ...

最新文章

  1. 压缩和归档及vi的使用
  2. python学生管理系统教学_Python项目:学生信息管理系统(完整版)
  3. 加密和解密算法 Asp.net
  4. C++ 有符号整数和无符号整数修饰符之间的差别
  5. 多元线性回归分析问题
  6. 《数据结构与算法》实验报告——二叉树的遍历
  7. 【Code-Snippet】TextView
  8. 洛谷 P2596 [ZJOI2006]书架 解题报告
  9. 再好的代码没有电也跑不了
  10. linux运行bin not found,自己制作根文件后,程序-/bin/sh:XXX:not found错误
  11. 数据结构——一些小点
  12. 超级终端连接华为交换机_Win8系统使用超级终端连接华为交换机的方法
  13. tomcat修改端口号 / 同时运行多个tomcat
  14. 虚拟机ping百度失败:PING www.a.shifen.com (163.177.151.110) 56(84) bytes of data.光标就一直闪
  15. 软件工程 实践者的研究方法 第三章答案
  16. python爬取喜马拉雅音频
  17. java压缩文件夹并加密
  18. Java小白常见异常|ArithmeticException算数异常的解决过程
  19. JQuery之Ajax方法
  20. 学计算机怎么入校,计算机摇号入学到底是如何进行随机录取的?一文了解!

热门文章

  1. ssm+jsp校友交流平台
  2. 引导滤波GuidedFilter
  3. ubuntu下amd超频工具_玩转GPU必备 – 我的Linux 工具箱
  4. 如何解决微信中如何直接打开外部浏览器打开指定链接
  5. 什么是BFC机制,如何触发BFC(消除浮动带来的父元素塌陷、垂直方向margin重叠、嵌套块级元素父元素margin塌陷)
  6. Intellij IDEA Ultimate下载安装
  7. 产品经理职业发展路径
  8. 电工学复习【3】-- 正弦交流电路
  9. AVPlayer 多媒体播放器
  10. HMS Core Discovery第15期回顾长文|构筑立体世界,共造沉浸式营销