返回题解分享
讨论 / 题解分享/ 帖子详情

海贼王之伟大航路 - 题解

其实很简单 设置一个最小值,每次递归都更新这个最小值,要是时间超过这个最小值直接全部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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!