-
思路
这里的主要思想还是回溯。
把城市之间的关系抽象成为图,DPi表示以第i个结点的相邻结点做dfs。
最后计算minDp = Math.min(Dp1, Dp2, Dp3,…Dpn); -
Java解答
public static List<Integer> cal(int[][] nums){
int len = nums.length;
int[][] edges = new int[len + 1][len + 1];
// 创建邻接矩阵
for (int i = 0; i < len; i++) {
int row = nums[i][0];
int col = nums[i][1];
edges[row][col] = 1;
edges[col][row] = 1;
}
int minDp = len + 1;
List<Integer> ret = new ArrayList<>();
// 已访问矩阵
int[] visited = new int[len + 1];
for(int v = 0; v < len + 1; v++){
int dpv = 0;
visited[v] = 1;
for (int i = 0; i < len + 1; i++) {
if(edges[v][i] == 1){
dpv = Math.max(dpv, dfs(edges, visited, i));
}
}
if(dpv <= minDp){
if(dpv < minDp){
ret.clear();
}
ret.add(v);
minDp = dpv;
}
visited[v] = 0;
}
return ret;
}
public static int dfs(int[][] edges, int[] visited, int ve){
if(visited[ve] == 1){
return 0;
}
int sum = 1;
visited[ve] = 1;
for (int i = 0; i < edges.length; i++) {
if(edges[ve][i] == 1){
sum += dfs(edges, visited, i);
}
}
visited[ve] = 0;
return sum;
}
}