海戰(dfs染色)

2021-10-21 17:20:00 字數 1245 閱讀 5706

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

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

輸入格式

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

輸出格式

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

思路:這是一道會了的話很簡單很簡單的搜尋染色題吧,唯一的乙個坑點就是如果乙個2x2的格仔裡有乙個,的話那麼我們就直接輸出bad就可以了,否則的話我們進入乙個雙重迴圈,如果當前字元是#的話,我們就進入dfs染色,具體操作在**中。

#include

using

namespace std;

int r,c,cnt;

string a[

1010];

int dx[5]

=,dy[5]

=;void

print()

;bool

check

(int x,

int y)

void

dfs(

int x,

int y)}}

intmain()

for(

int i=

1;i<=r;i++)}

}// print(); //個人愛好輸出函式除錯

for(

int i=

1;i<=r;i++)}

cout<<

"there are "

<" ships."

;//如果放置正確我們就輸出它的計數器計算的數量

return0;

}void

print()

cout<}}

邊的染色 dfs 思維

題目描述 小團有一張n個點,m條邊的無向圖g,有些邊上已經被標記了0或1,表示它的邊權。現在你需要給剩下的邊標記邊權為0或1,求有幾種標記的方式滿足 對於g中任意乙個環,裡面所有邊的邊權的異或值為0。環的定義如下 對於任意k k 2 個點,若對於所有的i 思路 此題的巧妙之處在於將邊權賦值為0或1,...

分考場 DFS 染色問題

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1輸出格式 一行乙個整數,表示最少分幾個考場。樣例輸入58 1 21 3 1 42 3 2 4...

歷屆試題 分考場(DFS,染色問題)

歷屆試題 分考場 時間限制 1.0s 記憶體限制 256.0mb 問題描述 n個人參加某項特殊考試。為了公平,要求任何兩個認識的人不能分在同乙個考場。求是少需要分幾個考場才能滿足條件。輸入格式 第一行,乙個整數n 1樣例輸出 4樣例輸入 5 101 2 1 31 4 1 52 3 2 42 5 3 ...