반응형
import java.util.*;
public class Main {
static int map [][];
static boolean visited [][];
//0위치를 엇갈리게 해야 for문 돌면서 체크할때 상하좌우를 하나씩 살펴볼 수 있다.
static int dr []= {-1,+1,0,0}; //좌우(가로열)을 살핀다.
static int dc []= {0,0,-1,+1}; //상하(세로열)을 살핀다.
static int n;
static int m;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num=sc.nextInt(); //반복횟수
for(int repeat=0;repeat<num;repeat++) {
n=sc.nextInt();
m=sc.nextInt();
int k=sc.nextInt(); //배추 갯수
map=new int[n][m];
visited =new boolean[n][m];
int ans=0;
//0/flase로 초기화
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
map[i][j]=0;
visited[i][j]=false;
}
}
//위치 입력받기
for(int i=0;i<k;i++) {
int a=sc.nextInt();
int b=sc.nextInt();
map[a][b]=1;
}
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
if(map[i][j]==1&&visited[i][j]==false) {
ans++;
bfs(i,j);
}
}
}
System.out.println(ans);
}
}
public static void bfs(int i, int j) {
visited[i][j]=true; //일단 들어온 애를 트루로 만들고,
for(int k=0;k<4;k++) {
int nx=i+dr[k];
int ny=j+dc[k];
//인덱스 범위를 벗어난다면 볼필요 없음
if(nx>=0&&ny>=0&&nx<n&&ny<m) {
if(map[nx][ny]==1&&visited[nx][ny]==false) {
bfs(nx,ny);
}
}
}
}
}
반응형
'개발 관련 공부 > 알고리즘' 카테고리의 다른 글
백준 2178 미로찾기 (0) | 2021.08.16 |
---|---|
백준 11724 연결 요소의 개수 (0) | 2021.08.13 |
백준 2667 (0) | 2021.08.11 |
백준 2606 (0) | 2021.08.10 |
백준 1260 (0) | 2021.08.09 |
댓글