学习《啊哈!算法》---暴力枚举--炸弹人篇 总结


前言

《啊哈算法的》中第三章,在学习第三章《枚举!很暴力》中,读完炸弹人篇发现和自己曾经做的题是一个类型的。
发这篇blog也是感慨一下,曾经自己想了一下午且认为难过登天的题目,其实就是简单的算法模型。

当然,感到高兴的是,自己曾经琢磨出的思路、方法还是正确的,至少在学习甚少的情况下,居然自己琢磨出了这种“有地图”的题目的一般思路。

一、原题

以下是PDF版本的截图:

在这里插入图片描述问题主要是 炸弹放在那里可以炸死更多的敌人。

二、分析

1.建模

书上的内容太过于精确,既然是我的blog就来用我的理解解释。
这种题目我一般称之为 地图题
其特点在于 和图形相关,并且多借助于老游戏 的设定给出题目背景。
所以都是一块一块的,基本可以做到映射到直角坐标系里面,每个元素均可以由(x,y)坐标来表达。


以上为数学模型,以下开始用编程思维描述
既然想到了直角坐标表达每个元素,那么就可以借助二维数组 来类比直角坐标系,a[ ][ ]就恰好可以模拟x,y。

而为了让程序可以识别,我们必须要修改、简化地图。用一个N*N的字符阵来抽象表达即可。一个字符对应一种元素。
在这里插入图片描述在这里插入图片描述

2.解题思路

题目一般都会给出一定的游戏规则,然后让我们对胜利情况进行编程求解。
而这时候就需要把题目翻译为编程语言。

比如在某某范围中、某某直线的某一边…
那这样的话,就完美符合了中学数学的知识。
如果要求在上下左右,就对相应的二维数组下标进行加减(中学的左加右减),如果线非常复杂的话,甚至还需要用到高中所学习的线性规划,来找到边界判断条件。
《啊哈!算法》中的例子较为简单,上方就是x-1在这里插入图片描述书中这个图生动形象地展示了对应关系。


3、遍历寻找

接下来要做的就是进行遍历,由于本次章节讲述的是暴力枚举,所以就需要一个个从地图上找元素是否符合要求(如题意中要求不能放置在某种地方),这种限制条件转换到代码就是在循环条件里面写成 != 之类的判断条件

附:关于边界问题

这类题目一大难点就在于—边界控制。
地图的边界、划定范围的边界,以及可移动目标的边界控制(这个最难)
有时候小于号< 到底要不要加等于号
移动目标在移在移动过程中到底何时要判断、何时不用判断
这都是要考虑的问题。

总结

之前啥算法也没有接触过的时候,在洛谷做的一个题目和这个有着异曲同工之妙,当时苦思冥想了整个周日的下午,还曾懊恼自己做题效率低下,但是如此看来,自己的思考并非没有意义的,还是算自己“碰上”了相对正确的思路,果然编程是磨出来的,自己思考出来的算法会非常的熟悉

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值