11 条题解

  • 0
    @ 2025-3-24 10:10:45

    其实很简单 设置一个最小值,每次递归都更新这个最小值,要是时间超过这个最小值直接全部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];
    			}
    		}
    	}
    }
    

    信息

    ID
    80
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    367
    已通过
    87
    上传者