문제

링크

풀이

#include <stdio.h>
 
int t[50][50];
 
void resetTable(int m, int n) {
  for (int i=0; i<m; i++)
    for (int j=0; j<n; j++)
      t[i][j] = 0;
}
 
void dfs(int m, int n, int x, int y) {
  t[x][y] = 0;
  if (x>0 && t[x-1][y]==1)    dfs(m, n, x-1, y);
  if (x<m-1 && t[x+1][y]==1)  dfs(m, n, x+1, y);
  if (y>0 && t[x][y-1]==1)    dfs(m, n, x, y-1);
  if (y<n-1 && t[x][y+1]==1)  dfs(m, n, x, y+1);
}
 
int main(void) {
  int T, m, n, k, x, y;
 
  scanf("%d", &T);
  for (int a=0; a<T; a++) {
    resetTable(m, n);
    scanf("%d %d %d", &m, &n, &k);
    for (int b=0; b<k; b++) {
      scanf("%d %d", &x, &y);
      t[x][y] = 1;
    }
    int count = 0;
    for (int b=0; b<m; b++) {
      for (int c=0; c<n; c++) {
        if (t[b][c] == 1) {
          dfs(m, n, b, c);
          count++;
        }
      }
    }
    printf("%d\n", count);
  }
  return 0;
}