其实很简单 设置一个最小值,每次递归都更新这个最小值,要是时间超过这个最小值直接全部return
import java.util.List;
import java.util.Scanner;
public class 海贼王之伟大航路 {
static List<Integer> list = new ArrayList<>();static int year=0;static int min = Integer.MAX_VALUE;
static int []vis ;static int[][] step;static int[]dist;static int [][]island;
static int time=0;
public static void main(String[] args) {
Scanner inputScanner = new Scanner(System.in);
int num = inputScanner.nextInt();
island = new int[num+1][num+1];
vis = new int[num+1];
step = new int[num+1][num+1];
dist = new int[num + 1];
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= num ; j++) {
island[i][j]=inputScanner.nextInt(); //i到j岛屿距离
}
}
vis[1]=1; //初始点已经走过
dfs(island,1,1);
for(int i=0;i<list.size();i++) {
if(list.get(i)<min) {
min=list.get(i);
}
}
System.out.println(min);
}
private static void dfs(int[][] island,int count,int index) {
if(year>min) return;
// TODO Auto-generated method stub
if(count==island.length-1&&index==island.length-1) {
min=Math.min(year,min);
}
for (int i = 1; i < island.length; i++) {
if(island[index][i]!=0&&vis[i]!=1) {
year+=island[index][i];
vis[i]=1;
dfs(island,count+1,i);
vis[i]=0;
year-=island[index][i];
}
}
}
}
0 回复
0 转发
0 喜欢
1 阅读



