天天看点

ZOJ-1709

最近感觉下班完了就好累啊。。脑子都不想动,找找水题来切了。。这题最基础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;
}