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)); } } } }


+ Recent posts