简单深搜 lake counting

来源:互联网 发布:centos 7安装snmp服务 编辑:程序博客网 时间:2024/06/08 03:50

有一个大小M×N的园子,雨后积起了水。求院子内有多少水洼?

W表示积水。

在以 ’ W ‘ 为中心的九宫格内有另一 ’ W ‘ 即视为相连。

For example:

Input:

12 10

W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

Output:

3

这道题用深搜即可。

#include<cstdio>bool successed(char map[101][101], int m, int n, int&i, int&j);void dfs(char map[101][101], int m, int n, int i, int j);int main(){char map[101][101];int m, n, i, j, num;while (scanf("%d %d", &m, &n) != EOF){num = 0;for (i = 0; i < m; i++)scanf("%s", &map[i]);i=0,j=0;while (!successed(map, m, n, i, j))   //当map内没有‘W’时判断搜索完毕{dfs(map, m, n, i, j);num++;                //记录搜索次数}printf("%d\n", num);}return 0;}void dfs(char map[101][101], int m, int n, int i, int j)    //深搜{map[i][j] = '.';    //本位先置‘.’if (i<n - 1 && map[i + 1][j] == 'W')    //搜索相邻位置dfs(map, m, n, i + 1, j);if (i>0 && map[i - 1][j] == 'W')dfs(map, m, n, i - 1, j);if (j<m - 1 && map[i][j + 1] == 'W')dfs(map, m, n, i, j + 1);if (j>0 && map[i][j - 1] == 'W')dfs(map, m, n, i, j - 1);if (i<n - 1 && j<m - 1 && map[i + 1][j + 1] == 'W')dfs(map, m, n, i + 1, j + 1);if (i>0 && j>0 && map[i - 1][j - 1] == 'W')dfs(map, m, n, i - 1, j - 1);if (i<n - 1 && j>0 && map[i + 1][j - 1] == 'W')dfs(map, m, n, i + 1, j - 1);if (i>0 && j<m - 1 && map[i - 1][j + 1] == 'W')dfs(map, m, n, i - 1, j + 1);}bool successed(char map[101][101], int m, int n, int&i, int&j){for (i; i<n; i++)   //搜索‘W’for (j=0; j<m;j++)if (map[i][j] != '.')return false;return true;}


0 0