반응형
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Solution {
static int N, len;
static int[][] map, dir = {{1,0}, {0,1}, {-1,0}, {0,-1}};
static boolean[][] visited;
static Queue<Pair> queue;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int tc=1; tc<=T; tc++) {
N = sc.nextInt();
map = new int[N][N];
int maxLen = Integer.MIN_VALUE;
int minVar = Integer.MAX_VALUE;
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
map[i][j] = sc.nextInt();
}
}
for(int i=0; i<N; i++) {
for(int j=0; j<N; j++) {
len = 0;
visited = new boolean[N][N];
BFS(i, j);
if(maxLen < len) {
maxLen = len;
minVar = map[i][j];
}
if(maxLen == len && minVar > map[i][j]) {
minVar = map[i][j];
}
}
}
System.out.println("#" + tc + " " + minVar + " " + maxLen);
}
}
public static void BFS(int x, int y) {
queue = new LinkedList();
visited[x][y] = true;
queue.offer(new Pair(x, y));
while(!queue.isEmpty()) {
len++;
int size = queue.size();
for(int i=0; i<size; i++) {
Pair p = queue.poll();
for(int j=0; j<4; j++) {
int nx = p.x + dir[j][0];
int ny = p.y + dir[j][1];
if(isInside(nx, ny) && !visited[nx][ny] && map[nx][ny] == map[p.x][p.y]+1) {
queue.offer(new Pair(nx, ny));
visited[nx][ny] = true;
}
}
}
}
}
public static boolean isInside(int x, int y) {
return x>=0 && x<N && y>=0 && y<N;
}
}
class Pair {
int x;
int y;
Pair(int x, int y){
this.x=x;
this.y=y;
}
}
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[백준] 17070. 파이프 옮기기1 (0) | 2020.02.19 |
---|---|
[SWEA] 1873. 상호의 배틀필드 (4) | 2020.02.10 |
[백준] 4179. 불! (0) | 2020.02.05 |
[백준] 17136. 색종이 붙이기 (2) | 2020.02.05 |
[정올] 1169. 주사위 던지기1 (0) | 2020.02.01 |