| description |
모서리 Check + DFS |
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int width;
int height;
int check(int (&visited)[50][50],int (&graph)[50][50], int k, int l)
{
int result;
if (graph[k][l] == 1 && visited[k][l] == 0)
{
visited[k][l] = 1; // 방문했음을 check
if (k != 0)
{
check(visited, graph, k-1, l);
}
if (k!=(width-1))
{
check(visited, graph, k+1, l);
}
if (l != 0)
{
check(visited, graph, k, l-1);
}
if (l != (height-1))
{
check(visited, graph, k, l+1);
}
result = 1;
}
else // 이미 방문한 정점이면
{
result = 0;
}
return result;
}
void baechoo()
{
int m, n, k;
cin >> m >> n >> k;
int visited[50][50] = {0,};
int graph[50][50] = {0,};
int answer = 0;
for (int j=0; j<k; j++)
{
int x, y;
cin >> x >> y;
graph[x][y] = 1;
}
width = m;
height = n;
for (int k=0; k<m; k++)
{
for (int l=0; l<n; l++)
{
answer += check(visited, graph, k, l);
}
}
cout << answer << "\n";
}
int main()
{
int TC;
cin >> TC;
for (int i=0; i<TC; i++)
{
baechoo();
}
return 0;
}