java – 如何验证战舰领域?

前端之家收集整理的这篇文章主要介绍了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

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

原文链接:https://www.f2er.com/java/130237.html

猜你在找的Java相关文章