问题描述

  逗志芃是有妹子的现充,但是有时候妹子就是烦恼。因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点。由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了,所以现在被妹子搞成暴走状态了。但是妹子永远是上帝,所以逗志芃只能带妹子出去玩,不过为了节约时间,他希望找到一条花费时间最少的一次性游览线路。

输入格式

  第一行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

简单的floyed算法+dfs算法

package com.study.蓝桥杯.算法训练;import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;/*** @author sjn* @date 2022-2-23*//*
问题描述逗志芃是有妹子的现充,但是有时候妹子就是烦恼。因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点。由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了,所以现在被妹子搞成暴走状态了。但是妹子永远是上帝,所以逗志芃只能带妹子出去玩,不过为了节约时间,他希望找到一条花费时间最少的一次性游览线路。
输入格式第一行1个数n,表示逗志芃所在的城市有多少个景点,接下来是一个n*n的矩阵。a(i,j)表示i号景点到j号景点的路上花费的时间是多少。接下来是一个数m,表示逗志芃妹子要去去的景点数目。由于妹子在无理取闹,所以可能会有重复的景点,不过只要去一次就可以了。接下来是m个数,就是妹子要去的景点编号。
输出格式一个数,最少的花费时间。*/
public class ALGO_954逗志芃的暴走 {//全局变量res用来保存最短路径static int res = Integer.MAX_VALUE;public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[][] arr = new int[n + 1][n + 1];for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {arr[i][j] = sc.nextInt();}}int m = sc.nextInt();HashSet<Integer> hs = new HashSet<>();//用set集合降重for (int i = 0; i < m; i++) {hs.add(sc.nextInt());}int[] spot = hs.stream().mapToInt(Integer::valueOf).toArray();//使用floyed算出两个景点之前的最短路径floyed(arr);dfs(arr, spot, new boolean[hs.size()], new ArrayList<Integer>());System.out.println(res);}//floyed算法,算出两景点之间的最短路径public static void floyed(int[][] arr) {int n = arr.length - 1;for (int k = 1; k <= n; k++) {//k表示的是跳板景点,先从i景点到k景点再从k景点到j景点for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {arr[i][j] = Math.min(arr[i][j], arr[i][k] + arr[k][j]);}}}}/*** @param arr  保存两景点之间最短距离的数组* @param spot 妹子想去的城市* @param vis  第i个城市是否被访问* @param rank 存储景点的全排列*/public static void dfs(int[][] arr, int[] spot, boolean[] vis, ArrayList<Integer> rank) {if (rank.size() == spot.length) {//递归出口int sum = 0;for (int i = 0; i < rank.size() - 1; i++) {sum += arr[rank.get(i)][rank.get(i + 1)];}res = Math.min(sum, res);return;}for (int i = 0; i < spot.length; i++) {int c = spot[i];if (!vis[i]) {rank.add(c);vis[i] = true;//true表示被访问dfs(arr, spot, vis, rank);//回溯rank.remove(rank.size() - 1);vis[i] = false;}}}
}

蓝桥杯——基础练习——逗志芃的暴走相关推荐

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

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

  2. 蓝桥杯 强力党逗志芃 链式前向星结构的树形dp

    // 蓝桥杯 强力党逗志芃 // 采用树形dp,树以链式前向星形式存储#include <iostream> using namespace std;int power[205]; // ...

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

    每日更新蓝桥杯题解, 有兴趣关注一波呀 文章目录 题目描述 题解 java代码 C++代码 题目描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一 ...

  4. 蓝桥杯 算法训练 逗志芃的危机(Java)

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

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

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

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

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

  7. 蓝桥杯——算法基础 逗志芃的暴走PYTHON

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

  8. 蓝桥杯——逗志芃的暴走 (C++)

    题目来源:蓝桥杯算法训练 知识点:搜索.Floyd算法 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点.由于 ...

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

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

最新文章

  1. java.lang.OutOfMemoryError: Java heap space错误及...
  2. Windows Server 2012 R2 文件服务器安装与配置02 之基础说明与安装
  3. Windows7 Scrapy框架建立
  4. Elasticsearch Grok Pattern内置表达式大全
  5. 查看mysql是否内存中读取数据_MySQL中的内存临时表
  6. 合作式智能运输系统 车用通信系统应用层及应用数据交互标准(第二阶段)_携手推进汽车与信息通信标准化融合发展,CSAE与CCSA签署标准化工作备忘录...
  7. GPU Gems1 - 9 有效的阴影体渲染
  8. Codeforces 173E Camping Groups 线段树
  9. Windows 10 之重新安装应用
  10. 为应用程序池**提供服务的进程意外终止。进程ID是**。进程退出代码是'0x80'
  11. matlab如何判断矩阵中元素都大于0_在MATLAB中找到矩阵中零元素的数量
  12. Ubuntu的LAMP与相关软件安装设置
  13. 源码 解析_List源码解析
  14. 《大数据之路:阿里巴巴大数据实践》-第1章 总述
  15. VUE-地区选择器(V-Distpicker)
  16. vue axios封装
  17. 保留字符串中的大写字母(汇编语言)
  18. 使用百度云AI C++SDK在windows上进行在线语音识别
  19. 计算机核心论文如何审稿,计算机核心期刊排名及投稿经验(范文).doc
  20. 区块链预言机 Chainlink 测试环境部署与使用/探索区块链预言机的实现原理

热门文章

  1. 数据火器库八卦系列之瑞士军刀随APP携带的SQLite
  2. java监理的职责,监理工作总结应包括( )等主要内容。
  3. 修改android 系统设置 android 版本
  4. OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow
  5. 解决 Windows 10 中的网络连接问题
  6. ubuntu安装matlab,创建matlab快捷方式 ,解决快捷方式打不开
  7. free的含义究竟是什么?
  8. Matlab+UNet+LIDC 32行代码训练自己的肺结节数据集
  9. 单循环链表的基本操作
  10. oracle里的AUE是什么意思,Oracle - 事务