试题 算法训练 逗志芃的暴走 java实现
问题描述
逗志芃是有妹子的现充,但是有时候妹子就是烦恼。因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点。由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了,所以现在被妹子搞成暴走状态了。但是妹子永远是上帝,所以逗志芃只能带妹子出去玩,不过为了节约时间,他希望找到一条花费时间最少的一次性游览线路。
输入格式
第一行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实现相关推荐
- 算法训练,逗志芃的暴走(Java代码)-蓝桥杯/leetcode
蓝桥杯试题 算法训练 逗志芃的暴走(Java代码) 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对 ...
- 试题 算法训练 逗志芃的暴走
试题 算法训练 逗志芃的暴走 复习累了随便刷了道题,但没想到的是这道dfs有点坑... 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼. ...
- 试题 算法训练 逗志芃的危机 java实现
问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数**(n是偶数)**写成一行,然后两个人轮流取数,每次 ...
- 蓝桥杯 Python 算法训练 逗志芃的暴走
问题描述 逗志芃是有妹子的现充,但是有时候妹子就是烦恼.因为逗志芃太逗了,所以这段时间妹子对逗志芃发动了技能无理取闹,妹子要去玩很多的景点.由于逗志芃之前抽机花费了太多的时间,不久以后又要微积分考试了 ...
- 试题 算法训练 逗志芃的危机 (Java实现 通俗易懂)
问题描述: 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数,每次只能从 ...
- 蓝桥杯 试题 算法训练 逗志芃的危机
逗志芃的危机 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和他玩一个游戏,这个游戏是这样的:一共有n个数(n是偶数)写成一行,然后两个人轮流取数 ...
- 试题 算法训练 逗志芃的危机
在此记录一下学习大佬思路的题解吧 #include<iostream> using namespace std;const int N = 1010; int dp[N][N], a[N] ...
- 算法训练 逗志芃的危机
算法训练 逗志芃的危机 1.题目 2.输入格式 3.输出格式 4.代码部分 5.测试数据 1.题目 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要 ...
- 蓝桥杯 算法训练 逗志芃的危机
蓝桥杯 算法训练 逗志芃的危机 题目描述 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 逗志芃又一次面临了危机.逗志芃的妹子是个聪明绝顶的人,相比之下逗志芃就很菜了.现在她妹子要和 ...
最新文章
- 提供第三种代码生成方式——通过自定义BuildProvider为ASP.NET提供代码生成
- Domain adaptation:连接机器学习(Machine Learning)与迁移学习(Transfer Learning)
- 最近,又一家互联网公司裁员了,失业来得太突然…
- SIGIR 2021 最佳学生论文:用于图像-文本检索的动态交互式建模
- 13.2.4 模板层——模板语言
- [剑指offer][JAVA]面试题第[16]题[数值的整数次方][位运算][二分法]
- mongodb查询分页优化
- BlockChain: 区块链入门课程 -- 区块链适用于移动性 分享和收费案例
- 使用JDBC来实现一个简单的增删改查
- uvm_reg_defines——寄存器模型(四)
- python一次读取10行_Python怎么读取Excel的行数和列数?
- c语言读写txt坐标文件数据,用c语言读写sgy格式的地震数据文件.pdf
- 淘宝被中差评了应该怎么办
- Python turtle制作书法作品——《鸟鸣涧》
- ORAN C平面 Section Extension 1
- steam游戏开发_如何从Steam Cloud下载保存的游戏
- 2_竞赛无人机基础飞行控制函数——零基础学习竞赛无人机搭积木式编程
- matlab两个图共用一个x轴_Matlab绘制多x轴和多y轴图(双x双y轴/单x双y轴/双x单y轴图等),及坐标轴参数汇总...
- PowerDesigner生成带中文注释的ER图
- 隐私计算加密技术基础系列-Diffie–Hellman key exchange