nyoj 27 水池數目 BFS, DFS

2022-05-07 21:36:10 字數 2115 閱讀 2856

記憶體限制:64mb

時間限制:3000ms

special judge: no

accepted:17

submit:22

南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。

第一行輸入乙個整數n,表示共有n組測試資料

每一組資料都是先輸入該地圖的行數m(0輸出該地圖中水池的個數。

要注意,每個水池的旁邊(上下左右四個位置)如果還是水池的話的話,它們可以看做是同乙個水池。

複製

2

3 41 0 0 0

0 0 1 1

1 1 1 0

5 51 1 1 1 0

0 0 1 0 1

0 0 0 0 0

1 1 1 0 0

0 0 1 1 1

2

3分析1(bfs):

①、該題即就是看獨立的1的堆數有多少

②、根據bfs的思想,將資料為1的每層資料變為0後,向下一層遍歷,以遞推的思想將每乙個1都變為0

步驟:①、用bfs遍歷模板完成資料1的遍歷及修改

核心**:

1

void bfs(int x, inty)2

18q.pop();19}

20 }

c/c++**實現(ac):

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9

10using

namespace

std;

11const

int maxn = 105;12

int my_map[maxn][maxn], book[maxn][maxn], mov[4][2] = , , , };

13struct

node14;

1718

bool

judge(node q)

1923

24void bfs(int x, int

y)25

41q.pop();42}

43}4445

intmain()

4667}68

}69 printf("

%d\n

", cnt);70}

71return0;

72 }

分析2(dfs):

用dfs只是在處理遍歷方式有點不同,dfs是屬於一條路走到底的走法

核心**:

1

void dfs(int x, inty)2

12 }

c/c++**實現(ac):

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9

10using

namespace

std;

11const

int maxn = 105;12

int my_map[maxn][maxn], book[maxn][maxn], mov[4][2] = , , , };

13struct

node14;

1718

bool

judge(node q)

1923

24void dfs(int x, int

y)2535}

3637

intmain()

3859}60

}61 printf("

%d\n

", cnt);62}

63return0;

64 }

NYOJ 27 水池數目

includeint n int map 101 101 int row,col int der 4 2 用二維陣列記錄四個方向 void count int x,int y int main for i 0 i row i for j 0 j col j 判斷不為0 的點 printf d n n...

nyoj27水池數目

時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。輸入第一行輸入乙個整數n,表示共有n...

NYOJ 27 水池數目

描述 校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。輸入第一行輸入乙個整數n,表示共有n組測試資料 每一組資料都是先輸入該地圖的行數m 0輸出 輸出該地圖中水池的個數...