본문 바로가기

알고리즘

유기농 배추

import java.util.ArrayList;
import java.util.Scanner;

public class Main {	
/**
 * 	입력
 *	1]테스트케이스
 *	2]가로,세로 입력 (1~50) 배추가 심어져있는 위치 개수(1~2500)
 *	다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)
 *	dfs 가 호출되는 갯수를 세자
 *
 * 설계
 * [1] 테스트케이스 입력
 * [2] garo,sero
 * [3] a[sero][garo] 선언, v[sero][garo] dx[],dy[]
 * [4] k 배추 개수 17
 * [5] for(0~k)
 * 		a[x][y]=1;
 * 
 * 		for(i 0~sero)
 * 			for(j 0~garo)
 * 				만약 v[i][j]=f 이고 a[i][j]=1이면 dfs 탐색 시작 (v[x][y] 체크) //cnt+=1;
 * 
 * dfs(x,y)
 * 	
 *  for(i=0~4)
 *  	cx = x + dx[i]; cy = y + dy[i];
 *  	만약 cx>=0 ,cy>=0 cx<sero cy<garo 
 *  		만약 v[cx][cy]==false 이고 a[cx][cy]==1 이면 dfs(cx,cy) 호출
 */
	public static int testCase;
	public static int sero;
	public static int garo;
	public static int[][] arr;
	public static boolean[][] v;
	public static int k;
	public static int[] dx = new int[]{0,1,0,-1};
	public static int[] dy = new int[]{1,0,-1,0};
	public static int cnt=0;
	public static void main(String[] args) 
	{
		Scanner scan = new Scanner(System.in);
		testCase = scan.nextInt();
		for(int i=0;i<testCase;i++) 
		{
			garo = scan.nextInt();sero = scan.nextInt();k=scan.nextInt();
		// 	System.out.println("g:"+garo+" s:"+sero+" k:"+k);
			arr = new int[sero][garo];
			v = new boolean[sero][garo];
			for(int j=1;j<=k;j++) 
			{
				int x = scan.nextInt();int y = scan.nextInt();//4,2 a[2][4]=1;
				// System.out.println("x: "+y+" y:"+x);
				arr[y][x]=1;
			}
			
			for(int a=0;a<sero;a++) 
			{
				for(int b=0;b<garo;b++) 
				{
					if(v[a][b]==false && arr[a][b]==1) 
					{
						cnt+=1;
						v[a][b]=true;
						dfs(a,b);
					}
				}
			}
			System.out.println(cnt);
			cnt=0;
		}
		
		scan.close();
	}
	
	private static void dfs(int x, int y) {
		
		for(int i=0;i<4;i++) 
		{
			int cx = x+dx[i];int cy=y+dy[i];
			if(cx>=0 && cy>=0 && cx<sero && cy<garo) 
			{
				if(v[cx][cy]==false && arr[cx][cy]==1) 
				{
					v[cx][cy]=true;
					dfs(cx,cy);
				}
			}
		}
	}
   
}

'알고리즘' 카테고리의 다른 글

대표값  (0) 2019.08.13
미로 탐색  (0) 2019.08.09
중복없는구간  (0) 2019.08.07
직사각형배치경우의수  (0) 2019.08.02
rook  (0) 2019.08.02