謎題規(guī)則介紹#19 放置類——戰(zhàn)艦(battleships)
這次來介紹一下戰(zhàn)艦。
規(guī)則:
將給定的船舶放入盤面中,使得它們就不會(huì)相互接觸,也不會(huì)對(duì)角接觸。船可以旋轉(zhuǎn)。盤中可能已經(jīng)給出了一些船舶段,標(biāo)記為“水”的單元格不能包含任何船舶段。網(wǎng)格外的數(shù)字表示相應(yīng)行或列中出現(xiàn)的船舶段數(shù)。
例題和答案:



事實(shí)上,船的形狀可以任意取定,不過一般的比賽都是用的1*n的船。例題是6*6的,所以一般只用到長度為3的船。在一般的10*10比賽題中,都會(huì)用到長度為4的船,如下圖。

接下來介紹一些套路:
0、行列外提示是0的地方,可以直接把該行列的所有格子涂成水。如下面的例題,可以把第5行涂成水。


1.1、某行列外剩余能放船的格子數(shù)量等于外提示的地方,可以直接把那些格子全部放上船。

1.2、某行列已有船數(shù)量等于外提示的地方,把當(dāng)前行列其他格子都涂成水。

2、如果盤面內(nèi)已經(jīng)有一些船體的信息,可以利用這些船體信息和給定的船體來獲得線索。(注意有些時(shí)候給定的船體不一定都是1*n的?。?/p>
2.1、利用“船體不能接觸也不能對(duì)角接觸”,對(duì)于已經(jīng)固定的船,把它周圍的格子都涂成水。注意,這里第6行涂黑的單格并不是已經(jīng)固定的船,它的左邊和右邊可以進(jìn)行延長。

本題到這里其實(shí)已經(jīng)結(jié)束了,利用第二行的3,第三行的2,第6列的4就可以完成。

2.2、如果盤面內(nèi)給了一部分船體,可以利用這些船體的樣式來得到線索:


如果船只只有1*n的,那么可以將更多格子涂成水:

3、在盤面內(nèi),我們可以優(yōu)先考慮最大船只的放置。如下圖,把一列0填上之后,大小為3的船就只能放在第4列,而第4列只有連續(xù)的4個(gè)空格,因此中間兩格必須是船(這里用到了一點(diǎn)數(shù)圖的套路)。


上面這個(gè)題比較難,可能需要小試一下,大家可以自行嘗試。題目鏈接:
https://puzz.link/p?battleship/6/6/3g0h23g1h2h00i0h0g0j00j0g0h0i00h//c
4、到盤面后期的時(shí)候,可以整體考慮剩下的船應(yīng)該怎么放,有些時(shí)候剩幾艘船但是數(shù)字已經(jīng)全部用光之后就是看剩下的船怎樣去整體放置了。例如下圖,唯一解,大家可以嘗試一下。

鏈接:https://puzz.link/p?battleship/6/6/rg00g000h0g00g0g0h0g0g00g0h0i00g//c
戰(zhàn)艦的基本套路就是以上這些了。
接下來是兩個(gè)10階的練習(xí)題,用到的戰(zhàn)艦均為1*1~1*4的戰(zhàn)艦,在文章開頭已經(jīng)給了圖片,做題鏈接里也會(huì)附帶要用的船。


附上期答案:


那么本期介紹就先到這里,我們下期再見。