加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何验证战舰领域?

发布时间:2020-12-14 06:03:55 所属栏目:Java 来源:网络整理
导读:我试图用这些规则验证 battleship字段: 船舶不得与侧面或角落接触; 船是直的; 有1×4甲板船,2×3甲板,3×2甲板,4×1甲板船. 该字段表示为byte [10] [10]数组. 我可以用什么算法来实现这个目标? 我使用的语言是Java,但任何语言都很好. 解决方法 快速检查有
我试图用这些规则验证 battleship字段:

>船舶不得与侧面或角落接触;
>船是直的;
>有1×4甲板船,2×3甲板,3×2甲板,4×1甲板船.

该字段表示为byte [10] [10]数组.
我可以用什么算法来实现这个目标?
我使用的语言是Java,但任何语言都很好.

解决方法

快速检查有效性:1×4甲板船,4×1甲板船只必须正好占用1 * 4 2 * 3 3 * 2 4 * 1 = 20个单元.因此,如果您的字段不包含20个单元格,则它无效(船舶重叠或船舶不足)

现在,您需要验证每种类型的船舶的数量是否正确,并且船舶不会接触.你可以通过connected component analysis执行此操作.这里将使用简单的双通算法(链接中有伪代码和示例).这将为您提供场中每个“blob”的大小,位置和形状.

从那里,你只需要迭代每个blob并检查它是垂直线还是水平线.这很简单 – 只计算blob的宽度(最大和最小列值之间的差异)和高度(最大和最小行值之间的差异).其中一个必须等??于1.如果不是,则两艘船正在接触,并且该区域无效.

最后,检查每种船型的编号是否正确.如果不这样做,则该字段无效.如果您这样做,该字段有效,您就完成了.

编辑

船舶也可以端对端接触,但这会减少船舶总数(增加某种类型的船舶数量),从而无法进行最后一次测试.

编辑2

已更正使用正确的船舶规格.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读