//和POJ - 2386一模一样的答案,我代码都没有怎么改,就加了一个N+M和改了一下字符
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAXN 110
char map[MAXN][MAXN];
int nex[8][2] = { { 0, -1 },{ 1, -1 },{ 1, 0 },{ 1, 1 },{ 0, 1 },{ -1, 1 },{ -1, 0 },{ -1, -1 } };
int N, M;
int coun = 0;
using namespace std;
void dfs(int x, int y);
int main(void)
{
while (scanf("%d%d", &N, &M) != EOF&&N+M)
{
memset(map, 0, sizeof(map));
for (int i = 0; i < N; i++)
for (int j = 0; j < M; j++)
cin >> map[i][j];
coun = 0;
for (int i = 0; i<N; i++)
for (int j = 0; j < M; j++)
{
if (map[i][j] == '@')
{
coun++;
map[i][j] = '*';
dfs(i, j);
}
}
printf("%d\n", coun);
}
return 0;
}
void dfs(int x, int y)
{
for (int i = 0; i < 8; i++)
{
int tx = x + nex[i][0];
int ty = y + nex[i][1];
if (tx >= 0 && tx < N && ty >= 0 && ty < M && map[tx][ty] == '@')
{
map[tx][ty] = '*';
dfs(tx, ty);
}
}
}
POJ - 2386 - Lake Counting//这里有代码解析
HDU - 1241 - Oil Deposits
最新推荐文章于 2018-12-19 15:12:17 发布