記憶體限制:64mb
時間限制:3000ms
special judge: no
accepted:17
submit:22
南陽理工學院校園裡有一些小河和一些湖泊,現在,我們把它們通一看成水池,假設有一張我們學校的某處的地圖,這個地圖上僅標識了此處是否是水池,現在,你的任務來了,請用計算機算出該地圖中共有幾個水池。
第一行輸入乙個整數n,表示共有n組測試資料每一組資料都是先輸入該地圖的行數m(0輸出該地圖中水池的個數。
要注意,每個水池的旁邊(上下左右四個位置)如果還是水池的話的話,它們可以看做是同乙個水池。
複製
23 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
23分析1(bfs):
①、該題即就是看獨立的1的堆數有多少
②、根據bfs的思想,將資料為1的每層資料變為0後,向下一層遍歷,以遞推的思想將每乙個1都變為0
步驟:①、用bfs遍歷模板完成資料1的遍歷及修改
核心**:
1c/c++**實現(ac):void bfs(int x, inty)2
18q.pop();19}
20 }
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 910using
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是屬於一條路走到底的走法
核心**:
1void 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 910using
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輸出 輸出該地圖中水池的個數...