目录

1. 问题描述

2. 解题分析

2.1 贪心策略

3. 代码及测试

4. 后记


1. 问题描述

2. 解题分析

感觉非常没有头绪。先做一些实例计算分析。

2.1 贪心策略

考虑图1的{1234--3421}的例子。为了说明方便,以U*表示上边的数字,D*表示下边的数字。以“纵1”表示第一根纵线,余类推。以”横*”表示所添加的横线,横线上的数字(图中8边形中的数字)表示横线添加的序号。

假定按照类似于贪心算法的方式来绘制鬼脚图。

比如说U1要到达D1,必须横跨中间两根纵线,因此可以画出对应的横线如下图所示:

接下来考虑U2àD2. U2往下走时先碰到横1横跨到纵1,然后肯定必须再加一根横线回到纵2。但是这根横线添加的(相对于其它已经添加的横2、3的)纵向相对位置是与后续动作相关的,所以必须分情况考虑。显然这里有三种可能的情况,如下所示:

上图中的(2.1)由于横4的加入导致原来的U1到D1的路径发生了变化,所以予以排除(注1:暂时按照这种规则进行)。

图(2.2)中U2经过横1、横4后回到纵2,然后需要再添加一条横线到达D2,同样有相对于横3的上下相对位置的两种选择。但是如果添加到横3上面(横4与横3之间)的话,会导致原U1到D1的路径发生变化所以排除(2.2.1)。因此只有一种选择,如下图所示(2.2.2):

接下来继续考虑(2.2.2),我们会发现在(2.2.2)中U3和U4已经可以借助既有横线到达目的点了:U3-横2-横4;U4-横3-横5。因此我们得到{1234--3421}的第一个鬼脚图解。

接下来再回头考虑(2.3)的继续。U2要到到达D2还要追加一条线,由于横4已经比横3低了,所以追加横5只有一种可能。如下图所示:

然后我们同样发现,在(2.3.1)中U3和U4已经可以借助既有横线到达目的点了:U3-横2-横4-D3;U4-横3-横5-D4。因此我们得到{1234--3421}的第二个鬼脚图解。

以上我们基于类似于贪心算法的思路得到了{1234--3421}的两个鬼脚图解。但是这里存在几个问题:

  1. 如何确保,或者说如何证明,以上贪心算法总能得到最优解?
  2. 以上鬼脚图绘制规则由人手动来做的话似乎是一目了然的,但是如何让计算机按照这个规则来搜索呢,或者说如何编程呢?

试图总结以上鬼脚图绘制贪心策略如下(CSDN上不能很好地支持WORD复制过来的自动缩进所以只好贴图):

以上可以看作是一个基于贪心策略的深度优先搜索问题。虽然前进了一步,但是依然没有解决前面提及的两个问题:如何证明最优性或非最优性?如何编程?甚至,以上规则难以显而易见地判断是正确的。。。不过作为一种思路记录下来总归是有价值的

3. 代码及测试

4. 后记

[2021-11-05] 非常惭愧,这道题目从最开始看到过去了两个星期。但是一直没有找到明确的头绪,所以暂时先把到目前为止的思路列上。欢迎小伙伴们讨论指点。不过我还没有放弃(还没有想去偷看原书答案),还是希望自己能够找到一个属于自己的(哪怕笨拙)解决方案^-^毕竟现实生活中的问题并不总是有答案可以参考的。

[2021-11-08] 本问题的第2个思路参见:程序员的算法趣题Q56: 鬼脚图中的横线(思路2)https://blog.csdn.net/chenxy_bwave/article/details/121212455https://blog.csdn.net/chenxy_bwave/article/details/121212455

上一篇:Q55: 平分蛋糕

下一篇:Q57: 最快的联络网

本系列总目录参见:程序员的算法趣题:详细分析和Python全解

程序员的算法趣题Q56: 鬼脚图中的横线(思路1)相关推荐

  1. 程序员的算法趣题Q56: 鬼脚图中的横线(思路2的Python题解)

    目录 1. 问题描述 2. 实现方案 3. 代码实现 4. 后记 1. 问题描述 问题描述以及此前的讨论参见: 程序员的算法趣题Q56: 鬼脚图中的横线(思路1)https://blog.csdn.n ...

  2. 程序员的算法趣题Q56: 鬼脚图中的横线(思路2)

    目录 1. 问题描述 2. 思路2 2.1 从鬼脚图出发进行变形 2.2 反向变换 2.3 进一步探索 3. 小结 1. 问题描述 问题描述以及关于本问题的第一个思路参见:程序员的算法趣题Q56: 鬼 ...

  3. php算法求出一个数可以被分解成多少个_程序员的算法趣题

    计算机的世界每天都在发生着深刻的变化.新操作系统的发布.CPU性能的提升.智能手机和平板电脑的流行.存储介质的变化.云的普及--这样的变化数不胜数. 在这样日新月异的时代中,"算法" ...

  4. 程序员的算法趣题Q55: 平分蛋糕

    目录 1. 问题描述 2. 解题分析 2.1 初始算法流程 2.2 优化 3. 代码及测试 4. 后记 1. 问题描述 2. 解题分析 这个题目第一感就是动态规划. 对于(m, n)形状(如下图所示, ...

  5. 程序员的算法趣题Q57: 最快的联络网

    目录 1. 问题描述 2. 解题分析 2.1 学生的状态 2.2 学生状态转移 Case-T1:Do nothing, just wait Case-T2:给处于S0状态的学生打电话 Case-T3: ...

  6. 程序员的算法趣题Q66: 设计填字游戏

    目录 1. 问题描述 2. 解题分析 2.1 基本算法流程 2.2 连通性检查 3. 代码及测试 4. 后记 1. 问题描述 2. 解题分析 与前面的Q32.Q59以及后面的Q68(碰巧先做了Q68) ...

  7. LeetBook《程序员的算法趣题》Q18---水果酥饼日

    <程序员的算法趣题>-(日)增井敏克 , 书中为69 道数学谜题编写了解题程序, 编程语言为:Ruby,JavaScript,C语言. Q18 水果酥饼日   日本每月的 22 日是水果酥 ...

  8. 程序员的算法趣题Q50: 完美洗牌

    目录 1. 问题描述 2. 解题分析 2.1 思路1 2.2 思路2 3. 代码及测试 4. 后记 1. 问题描述 问题:对2n张牌洗牌,并求当1<=n<=100时,一共有多少个n可以使得 ...

  9. 程序员的算法趣题Q09: 落单的男女

    目录 1. 问题描述 2. 解题分析 3. 代码及测试 4. 思考 1. 问题描述 人们聚集在某个活动会场上,根据到场顺序排成一排等待入场,活动的主办人员,想把人们从队列的某个位置分成两组,想要让分开 ...

最新文章

  1. SAP RETAIL初阶之商品主数据WM视图
  2. DataSet RecordSet 互转
  3. 【STM32】窗口看门狗
  4. TimerTask定时任务
  5. ext4 关闭延迟分配
  6. mysql 外键和事务,MySQL-约束和事务
  7. SQL Server 2017:mTVF的交错执行
  8. warning C4819: The file contains a character that cannot be represented in the current code page
  9. Android学习资源网站 1
  10. Oracle书籍推荐
  11. ARM 汇编基础教程系列
  12. 普通高中信息技术课程标准( 必修 选修科目)
  13. k8s基本概念及使用
  14. 6步教你zencart模板制作
  15. 《树莓派项目实战》第五节 使用Nokia 5110液晶屏显示Hello World
  16. 动一行,修半年,我的代码八代单传
  17. 交集♂差集♂并集♂和其他集合的内置方法
  18. java 包别名_包别名(Package Aliasing)
  19. 电脑用js调用QQ客服聊天 阿星小栈
  20. 解决:IEDA在plugins里搜不到mybatisx插件

热门文章

  1. git pull原理
  2. 对称加密DES、3DES、AES的计算过程
  3. NestedScrollView吸顶和回弹
  4. ps磨皮插件专用智能磨皮插件Portraiture4
  5. PCI 9054应用总结
  6. Nginx之父被抓,在职期间写的nginx竟属于公司?
  7. 买手机就要买大容量的以及为什么手机内存满了之后会变卡
  8. The ADB binary found at xxx is obsolete问题解决
  9. 凹透镜类毕业论文文献包含哪些?
  10. 【小林课堂】【光学】 透镜成像规律