洛谷P1331海戰

2021-10-18 22:11:21 字數 1465 閱讀 6870

題目描述

題目描述

在峰會期間,武裝部隊得處於高度戒備。警察將監視每一條大街,軍隊將保衛建築物,領空將布滿了f-2003飛機。此外,巡洋船隻和艦隊將被派去保護海岸線。不幸的是因為種種原因,國防海軍部僅有很少的幾位軍官能指揮大型海戰。因此,他們考慮培養一些新的海軍指揮官,他們選擇了「海戰」遊戲來幫助學習。

在這個著名的遊戲中,在乙個方形的盤上放置了固定數量和形狀的船隻,每只船卻不能碰到其它的船。在這個題中,我們僅考慮船是方形的,所有的船隻都是由圖形組成的方形。編寫程式求出該棋盤上放置的船隻的總數。

輸入格式

輸入檔案頭一行由用空格隔開的兩個整數r和c組成,1<=r,c<=1000,這兩個數分別表示遊戲棋盤的行數和列數。接下來的r行每行包含c個字元,每個字元可以為「#」,也可為「.」,「#」表示船隻的一部分,「.」表示水。

輸出格式

為每乙個段落輸出一行解。如果船的位置放得正確(即棋盤上只存在相互之間不能接觸的方形,如果兩個「#」號上下相鄰或左右相鄰卻分屬兩艘不同的船隻,則稱這兩艘船相互接觸了)。就輸出一段話「there are s ships.」,s表示船隻的數量。否則輸出「bad placement.」。

分析

根據題意來看,所有船都是方形的。如果出現兩個船相交的話,就輸出bad placement.否則輸出有多少個船。通過模擬不難發現,如果出現兩船相交的情況,那麼圖中一定存在以下四種情況之一的四個點

1.

.# ##

2.#.

##3.##

#.4.##

.#

也就是說,我們可以遍歷圖中的點,然後判斷該點所處情形是否屬於四種情況之一。若有點出現這種情況,則直接輸出bad placement.否則用dfs求連通塊數量即可。

**

#include

#include

#include

using

namespace std;

const

int n =

1010

;char mmap[n]

[n];

int n, m;

bool

isbad

(int x,

int y)

int vis[4]

[2]=

,,,}

;void

dfs(

int x,

int y)

}int

main

(void)}

if(!flag)

break;}

if(!flag)

else}}

printf

("there are %d ships.\n"

, cnt);}

return0;

}

洛谷P1331海戰

題目傳送門 這道題的難點在於判斷是否有船相鄰。通過自己模擬的資料可以得出結論 如果圖是不和法的,一定存在如下結構 或 或 或 即在乙個2 2的方格中有三個 因為題裡說船是方形的,即只能是橫條或豎條 剛開始不審題爆掉了37分 於是就有判斷 boold int i,int j if a i 1 j if...

P1331 海戰 洛谷

在峰會期間,武裝部隊得處於高度戒備。警察將監視每一條大街,軍隊將保衛建築物,領空將布滿了f 2003飛機。此外,巡洋船隻和艦隊將被派去保護海岸線。不幸的是因為種種原因,國防海軍部僅有很少的幾位軍官能指揮大型海戰。因此,他們考慮培養一些新的海軍指揮官,他們選擇了 海戰 遊戲來幫助學習。在這個著名的遊戲...

洛谷P1331 海戰

這還是一道聯通塊的題,只是需要判斷是否存在以下四種情況 o.o oo oo oo oo o.o 如果存在就是bad placement.要注意標記以下,不然會出現多次輸出bad placement.的情況。ac 如下 include include include include include i...