这次来介绍一下战舰。
规则:
将给定的船舶放入盘面中,使得它们就不会相互接触,也不会对角接触。船可以旋转。盘中可能已经给出了一些船舶段,标记为“水”的单元格不能包含任何船舶段。网格外的数字表示相应行或列中出现的船舶段数。
(资料图片)
例题和答案:
事实上,船的形状可以任意取定,不过一般的比赛都是用的1*n的船。例题是6*6的,所以一般只用到长度为3的船。在一般的10*10比赛题中,都会用到长度为4的船,如下图。
接下来介绍一些套路:
0、行列外提示是0的地方,可以直接把该行列的所有格子涂成水。如下面的例题,可以把第5行涂成水。
、某行列外剩余能放船的格子数量等于外提示的地方,可以直接把那些格子全部放上船。
、某行列已有船数量等于外提示的地方,把当前行列其他格子都涂成水。
2、如果盘面内已经有一些船体的信息,可以利用这些船体信息和给定的船体来获得线索。(注意有些时候给定的船体不一定都是1*n的!)
、利用“船体不能接触也不能对角接触”,对于已经固定的船,把它周围的格子都涂成水。注意,这里第6行涂黑的单格并不是已经固定的船,它的左边和右边可以进行延长。
本题到这里其实已经结束了,利用第二行的3,第三行的2,第6列的4就可以完成。
、如果盘面内给了一部分船体,可以利用这些船体的样式来得到线索:
如果船只只有1*n的,那么可以将更多格子涂成水:
3、在盘面内,我们可以优先考虑最大船只的放置。如下图,把一列0填上之后,大小为3的船就只能放在第4列,而第4列只有连续的4个空格,因此中间两格必须是船(这里用到了一点数图的套路)。
上面这个题比较难,可能需要小试一下,大家可以自行尝试。题目链接:
/p?battleship/6/6/3g0h23g1h2h00i0h0g0j00j0g0h0i00h//c
4、到盘面后期的时候,可以整体考虑剩下的船应该怎么放,有些时候剩几艘船但是数字已经全部用光之后就是看剩下的船怎样去整体放置了。例如下图,唯一解,大家可以尝试一下。
链接:/p?battleship/6/6/rg00g000h0g00g0g0h0g0g00g0h0i00g//c
战舰的基本套路就是以上这些了。
接下来是两个10阶的练习题,用到的战舰均为1*1~1*4的战舰,在文章开头已经给了图片,做题链接里也会附带要用的船。
附上期答案:
那么本期介绍就先到这里,我们下期再见。
关键词:
相关阅读