问题描述
  逗志芃是有妹子的现充,但是有时候妹子就是烦恼。因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点。由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了,所以现在被妹子搞成暴走状态了。但是妹子永远是上帝,所以逗志芃只能带妹子出去玩,不过为了节约时间,他希望找到一条花费时间最少的一次性游览线路。
输入格式
  第一行1个数n,表示逗志芃所在的城市有多少个景点,接下来是一个n*n的矩阵。a(i,j)表示i号景点到j号景点的路上花费的时间是多少。
  接下来是一个数m,表示逗志芃妹子要去去的景点数目。由于妹子在无理取闹,所以可能会有重复的景点,不过只要去一次就可以了。接下来是m个数,就是妹子要去的景点编号。
输出格式
  一个数,最少的花费时间。
样例输入
3
0 1 2
1 0 3
2 3 0
3
2 3 1
样例输出
3
数据规模和约定
  0<n<=30,0<m<=20,时间<=1000000

解题思路:利用Floyd算法将点与点之间的最短路径算出来,然后再对要去的景点dfs计算最优解(遍历完后的最优解是不会走重复的点的)


import java.util.Scanner;//有重复的点
public class Main {static int n, m;// n代表n行n列 m代表旅游景点个数static int[][] map = new int[31][31];// 存储给定的景点之间的距离static int[] vis = new int[31];// 存储景点的状态,0是没有走过的,1是已经走过static int[] b = new int[21];// m个输入要去的景点static int ans = Integer.MAX_VALUE;// 最终最短路径长度public static void main(String[] args) {Scanner scanner = new Scanner(System.in);n = scanner.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {map[i][j] = scanner.nextInt();}}floyd();// 进行floyd计算点与点之间的最短距离m = scanner.nextInt();for (int i = 1; i <= m; i++) {b[i] = scanner.nextInt();}// 进行dfs搜索for (int i = 1; i <= m; i++) {// 遍历要去的景点vis[b[i]] = 1;// 将第一个点状态置1dfs(b[i], 0);vis[b[i]] = 0;// 恢复状态}System.out.println(ans);}// 利用Floyd算法得出点到点之间的最优解public static void floyd() {for (int k = 1; k <= n; k++) {// 中间点for (int i = 1; i <= n; i++) {// 起始点for (int j = 1; j <= n; j++) {// 终点map[i][j] = Math.min(map[i][j], map[i][k] + map[k][j]);}}}}public static void dfs(int u, int length) {boolean flag = true;// 结束的标志for (int i = 1; i <= m; i++) {// 遍历所有要去的景点的状态,如果都是1说明已经都走过了,就结束。if (vis[b[i]] == 0) {// 找到还有没走的景点flag = false;// 修改结束标志break;// 跳出循环}}if (flag) {// 结束则判断之前的路径和当前路径的大小,取较小值ans = Math.min(ans, length);return;}for (int i = 1; i <= m; i++) {// 没有结束则遍历要去的景点if (vis[b[i]] == 0 && length + map[u][b[i]] <= ans) {// 判断景点是否去过,到下一个景点的距离长度小于当前最佳路径的值,才考虑走这个点vis[b[i]] = 1;// 将景点状态置1dfs(b[i], length + map[u][b[i]]);// 寻找下一个点vis[b[i]] = 0;// 恢复景点状态}}}
}

提交结果:

dfs代码应该可以优化,两个循环可以写成一个,不过要思考结束条件,就不想了,嘿嘿。

试题 算法训练 逗志芃的暴走 java实现相关推荐

  1. 算法训练,逗志芃的暴走(Java代码)-蓝桥杯/leetcode

    蓝桥杯试题 算法训练 逗志芃的暴走(Java代码) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对 ...

  2. 试题 算法训练 逗志芃的暴走

    试题 算法训练 逗志芃的暴走 复习累了随便刷了道题,但没想到的是这道dfs有点坑... 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼. ...

  3. 试题 算法训练 逗志芃的危机 java实现

    问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数**(n是偶数)**写成一行,然后两个人轮流取数,每次 ...

  4. 蓝桥杯 Python 算法训练 逗志芃的暴走

    问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点.由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了 ...

  5. 试题 算法训练 逗志芃的危机 (Java实现 通俗易懂)

    问题描述: 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从 ...

  6. 蓝桥杯 试题 算法训练 逗志芃的危机

    逗志芃的危机 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数 ...

  7. 试题 算法训练 逗志芃的危机

    在此记录一下学习大佬思路的题解吧 #include<iostream> using namespace std;const int N = 1010; int dp[N][N], a[N] ...

  8. 算法训练 逗志芃的危机

    算法训练 逗志芃的危机 1.题目 2.输入格式 3.输出格式 4.代码部分 5.测试数据 1.题目 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要 ...

  9. 蓝桥杯 算法训练 逗志芃的危机

    蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...

最新文章

  1. 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
  2. Domain adaptation:连接机器学习(Machine Learning)与迁移学习(Transfer Learning)
  3. 最近,又一家互联网公司裁员了,失业来得太突然…
  4. SIGIR 2021 最佳学生论文:用于图像-文本检索的动态交互式建模
  5. 13.2.4 模板层——模板语言
  6. [剑指offer][JAVA]面试题第[16]题[数值的整数次方][位运算][二分法]
  7. mongodb查询分页优化
  8. BlockChain: 区块链入门课程 -- 区块链适用于移动性 分享和收费案例
  9. 使用JDBC来实现一个简单的增删改查
  10. uvm_reg_defines——寄存器模型(四)
  11. python一次读取10行_Python怎么读取Excel的行数和列数?
  12. c语言读写txt坐标文件数据,用c语言读写sgy格式的地震数据文件.pdf
  13. 淘宝被中差评了应该怎么办
  14. Python turtle制作书法作品——《鸟鸣涧》
  15. ORAN C平面 Section Extension 1
  16. steam游戏开发_如何从Steam Cloud下载保存的游戏
  17. 2_竞赛无人机基础飞行控制函数——零基础学习竞赛无人机搭积木式编程
  18. matlab两个图共用一个x轴_Matlab绘制多x轴和多y轴图(双x双y轴/单x双y轴/双x单y轴图等),及坐标轴参数汇总...
  19. PowerDesigner生成带中文注释的ER图
  20. 隐私计算加密技术基础系列-Diffie–Hellman key exchange

热门文章

  1. ZEBRA打印汉字的实现
  2. 00002 贪婪洞窟.003.3:物品
  3. JavaScript:对象可枚举和不可枚举属性
  4. linux修改python解释器的默认编码模式
  5. ksrot php_JS实现PHP ksort方法
  6. 周立波语录 壹周立波经典搞笑语录
  7. 网页设计与制作的学习(二)
  8. 互联网+红旅赛道校赛决赛观摩部分收获
  9. 【求职】腾讯 2017 校招开发工程师笔试试卷(一)
  10. 【练习题+1】某人三天打渔两天晒网,假设他从1990年1月1日开始打渔三天,然后晒网两天,请编程回答任意的一天他在打渔还是晒网。