← Back to List

11123번: 양 한마리... 양 두마리... ↗

Solutions

C++14
1.1 KB | 1096 chars
#include <iostream>
using namespace std;
int T, H, W;
char ar[110][110];
bool check[110][110];
int dy[] = {0, 0, 1, -1};
int dx[] = {1, -1, 0, 0};

void DFS(int Y, int X)
{
    check[Y][X] = true;
    for (int d = 0; d < 4; d++)
    {
        if (0 > Y + dy[d] || Y + dy[d] >= H || 0 > X + dx[d] || X + dx[d] >= W)
            continue;
        if(ar[Y+dy[d]][X+dx[d]] == '#' && check[Y+dy[d]][X+dx[d]] == false)
        {
            DFS(Y+dy[d],X+dx[d]);
        }
    }
}

int main()
{
    cin >> T;
    for (int t = 0; t < T; t++)
    {
        cin >> H >> W;
        int cnt = 0;
        for (int y = 0; y < H; y++)
        {
            for (int x = 0; x < W; x++)
            {
                cin >> ar[y][x];
                check[y][x] = false;
            }
        }

        for (int y = 0; y < H; y++)
        {
            for (int x = 0; x < W; x++)
            {
                if (ar[y][x] == '#' && check[y][x] == false)
                {
                    cnt++;
                    DFS(y, x);
                }
            }
        }

        cout << cnt << endl;
    }
}