题目
分析
给一油井分布图,相邻的油井开采的是同一油矿。问共有几个油矿。
思路
找到一个油井,计数增一,同时将与之相邻的油井全部盖上(dfs
或bfs
),再继续寻找油井。
代码
#include <cstdio>
#define N 102
int m, n;
char map[N][N];
int next[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
void dfs(int i, int j)
{
/* for (int l = 0; l < m; l++) printf("%s\n", map[l]); printf("\n"); */
for (int k = 0; k < 8; k++) {
int x = i+next[k][0], y = j+next[k][1];
if (map[x][y] == '@') {
map[x][y] = '*';
dfs(x, y);
}
}
}
int solve()
{
int r = 0;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (map[i][j] == '@') {
map[i][j] = '*';
r++;
dfs(i, j);
}
return r;
}
int main()
{
while (~scanf("%d%d", &m, &n), !(m==0 && n==0)) {
for (int i = 0; i < m; i++)
scanf("%s", map[i]);
printf("%d\n", solve());
}
return 0;
}