java – 如何验证战舰领域?
我试图用这些规则验证
battleship字段:
>船舶不得与侧面或角落接触; 该字段表示为byte [10] [10]数组. 解决方法
快速检查有效性:1×4甲板船,4×1甲板船只必须正好占用1 * 4 2 * 3 3 * 2 4 * 1 = 20个单元.因此,如果您的字段不包含20个单元格,则它无效(船舶重叠或船舶不足)
现在,您需要验证每种类型的船舶的数量是否正确,并且船舶不会接触.你可以通过connected component analysis执行此操作.这里将使用简单的双通算法(链接中有伪代码和示例).这将为您提供场中每个“blob”的大小,位置和形状. 从那里,你只需要迭代每个blob并检查它是垂直线还是水平线.这很简单 – 只计算blob的宽度(最大和最小列值之间的差异)和高度(最大和最小行值之间的差异).其中一个必须等??于1.如果不是,则两艘船正在接触,并且该区域无效. 最后,检查每种船型的编号是否正确.如果不这样做,则该字段无效.如果您这样做,该字段有效,您就完成了. 编辑 船舶也可以端对端接触,但这会减少船舶总数(增加某种类型的船舶数量),从而无法进行最后一次测试. 编辑2 已更正使用正确的船舶规格. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |