dfs이용해여 연결되어있는데 까지 다 연결한다.
그리고 연결된 곳은 visit로 표시한다.
import java.util.Scanner;
class Point{
int x, y;
public Point(int x, int y){
this.x=x;
this.y=y;
}
}
public class Main {
static int map[][];
static boolean visit[][];
static int row,cal;
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int T=scan.nextInt();
int test_case;
for(test_case=1;test_case<=T;test_case++){
row=scan.nextInt();
cal=scan.nextInt();
int num=scan.nextInt();
map=new int[cal][row];
visit=new boolean[cal][row];
//System.out.println("row:"+row+"cal:"+cal+"num:"+num);
for(int i=0;i<num;i++){
int x=scan.nextInt();
int y=scan.nextInt();
map[y][x]=1;
}
int count=0;
for(int i=0;i<cal;i++){
for(int j=0;j<row;j++){
if(visit[i][j]==false && map[i][j]==1){
dfs(new Point(j,i));
count++;
}
}
}
System.out.println(count);
}
}
//북 동 남 서
static int dx[]={0,1,0,-1};
static int dy[]={-1,0,1,0};
public static void dfs(Point point){
visit[point.y][point.x]=true;
for(int i=0;i<4;i++){
int x=point.x;
int y=point.y;
if(x+dx[i]<0 || x+dx[i]>row-1 || y+dy[i]<0 || y+dy[i]>cal-1){
continue;
}
if(map[y+dy[i]][x+dx[i]]!=0&&visit[y+dy[i]][x+dx[i]]==false ){
y+=dy[i];
x+=dx[i];
dfs(new Point(x,y));
}
}
}
}
'코딩문제' 카테고리의 다른 글
[백준알고리즘] 숨바꼭질 (BFS) (0) | 2018.03.23 |
---|---|
[백준알고리즘]1987 알파벳 (DFS) (0) | 2018.03.23 |
[백준알고리즘]2178 미로 탐색 (BFS) (0) | 2018.03.23 |
[백준알고리즘] 팩토리얼 0의 개수 (0) | 2018.03.23 |
[코드그라운드] 프리랜서 (DP) (0) | 2018.03.23 |