코테 공부
[SWEX] 최적의 경로(1247번, 자바)
DaEun_
2023. 1. 3. 18:35
DFS 이용!!
visit : 방문 확인
distance[num]: num번 손님까지 방문했을 때의 거리
loc[x][0], loc[x][1]: 위치 좌표
import java.util.*;
class Solution
{
static int N;
static int[][] loc;
static boolean[] visit;
static int[] distance;
static int answer=0;
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
answer=Integer.MAX_VALUE;
N=sc.nextInt();
loc=new int[N+2][N+2];
visit=new boolean[N+2];
distance=new int[N+2];
for(int i=0;i<N+2;i++) {
loc[i][0]=sc.nextInt();
loc[i][1]=sc.nextInt();
}
dfs(0,0);
System.out.println("#"+test_case+" "+answer);
}
}
static void dfs(int num, int count) {
if(count>=N) {
System.out.println(distance[num]);
answer=Math.min(answer, distance[num]+Math.abs(loc[num][0]-loc[1][0])+Math.abs(loc[num][1]-loc[1][1]));
return;
}
for(int i=2;i<N+2;i++) {
if(visit[i]) continue;
distance[i]=Math.abs(loc[num][0]-loc[i][0])+Math.abs(loc[num][1]-loc[i][1])+distance[num];
visit[i]=true;
dfs(i,count+1);
distance[i]=0;
visit[i]=false;
}
}
}