Floodfill漫水填充法
题目:啊哈算法 P114 求有多少个独立小岛 其中陆地点大于0,海洋点为0
int mp[N][N], book[N][N]; int n, m; // n * m地图 int num = 0;
int divv[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
void dfs(int x, int y, int color)
{
mp[tx][ty] = color;
for (int k = 0; k < 4; ++ k)
{
int tx = x + divv[k][0];
int ty = y + divv[k][1];
if (tx < 1 || tx > n || ty < 1 || ty > m) continue;
if (mp[tx][ty] > 0 && book[tx][ty] == 0)
{
book[tx][ty] = 1;
dfs(tx, ty, color);
}
}
} int main() { scanf("%d%d", &n, &m); for (int i = 1; i <= n; ++ i) for (int j = 1; j <= m; ++ j) scanf("%d", &mp[i][j]); // 对每个大于0的点进行dfs染色 for (int i = 1; i <= n; ++ i) for (int j = 1; j <= m; ++ j) if (mp[i][j] > 0) { -- num; book[i][j] = 1; dfs(i, j, num); } // 输出染色后的地图 for (int i = 1; i <= n; ++ i) { for (int j = 1; j <= m; ++ j) printf("%3d ", mp[i][j]); puts(""); } cout << -num << "个独立小岛"; return 0;
}
输入 输出