最近感觉下班完了就好累啊。。脑子都不想动,找找水题来切了。。这题最基础BFS,无节操地水掉了。。
#include<cstdio>
#include<deque>
using namespace std;
namespace
{
int m, n;
char s[105][105];
deque<pair<int, int> > Q;
void bfs(int row, int col)
{
Q.clear();
Q.push_back(make_pair(row, col));
s[row][col] = '*';
while (!Q.empty())
{
pair<int, int> p = Q.front();
Q.pop_front();
for (int i = -1; i <= 1; i++)
for (int j = -1; j <= 1; j++)
{
int r = p.first + i;
int c = p.second + j;
if (r >= 0 && r < m && c >= 0 && c < n && s[r][c] == '@')
{
s[r][c] = '*';
Q.push_back(make_pair(r, c));
}
}
}
}
void solve()
{
int res = 0;
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (s[i][j] == '@')
{
bfs(i, j);
res++;
}
printf("%d\n", res);
}
}
int main()
{
while (scanf("%d %d", &m, &n), m)
{
for (int i = 0; i < m; i++)
scanf("%s", s[i]);
solve();
}
return 0;
}