import java.util.*;
import java.io.*;
public class Main_치킨배달 {
static int n, m, min = Integer.MAX_VALUE;
static int[][] map;
static ArrayList<int[]> home = new ArrayList<>();
static ArrayList<int[]> chi = new ArrayList<>();
static Stack<int[]> stack = new Stack<>();
static void sol(int cnt, int as) {
if (cnt == m) {
min = Math.min(dis(), min);
return;
}
for (int i = as; i < chi.size(); i++) {
stack.push(chi.get(i));
sol(cnt + 1, i + 1);
stack.pop();
}
}
static int dis() {
int hap = 0;
for (int[] h : home) {
int minDis = Integer.MAX_VALUE;
for (int[] s : stack) {
minDis = Math.min(Math.abs(h[0]-s[0]) + Math.abs(h[1]-s[1]), minDis);
}
hap += minDis;
}
return hap;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
map = new int[n][n];
for (int i = 0; i < n; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
if (map[i][j] == 1) home.add(new int[] {i, j});
else if (map[i][j] == 2) chi.add(new int[] {i, j});
}
}
sol(0, 0);
System.out.println(min);
}
}
'알고리즘 > 백준 (JAVA)' 카테고리의 다른 글
백준 1012 유기농 배추 / java 자바 (0) | 2021.04.13 |
---|---|
백준 3109 빵집 / java 자바 (0) | 2021.04.13 |
백준 17135 캐슬 디펜스 / java 자바 (0) | 2021.04.13 |
백준 2961 도영이가 만든 맛있는 음식 / java 자바 (2) | 2021.04.13 |
백준 17478 재귀함수가 뭔가요? / java 자바 (0) | 2021.04.13 |