例题6-12 UVa572 Oil Deposits(DFS)

来源:互联网 发布:php 调用jenkins 接口 编辑:程序博客网 时间:2024/05/01 09:52

题意:

就是看有几个可以搜索完的块,求连通块,有个专门的算法名:种子填充

要点:

标准深搜,有上下左右和斜对角的可以用二重循环来表示


#include<stdio.h>#include<string.h>#include<stdlib.h>bool idx[150][150];char map[150][150];int m, n;void dfs(int x, int y){if (!idx[x][y] || map[x][y] != '@') return;if (x < 0 || x >= m || y < 0 || y >= n)  return;for (int i = -1; i <= 1; i++)for (int j = -1; j <= 1; j++)if (i != 0 || j != 0)     //只要有一个不是0就可以,同时0就不动{map[x][y] = false;dfs(x + i, y + j);}}int main(){int i,j;while (scanf("%d%d", &m, &n) != EOF, m + n){memset(idx, true, sizeof(idx));int count = 0;for (i = 0; i < m; i++)scanf("%s", map[i]);for (i = 0; i < m; i++)for (j = 0; j < n; j++){if (idx[i][j] && map[i][j] == '@'){dfs(i, j);count++;}}printf("%d\n", count);}return 0;}


0 0