2017华为机试题--Floyd算法
小K是X区域的销售经理,他平常常驻“5”城市,并且经常要到“1”、“2”、“3”、“4”、“6”城市出差。当机场出现大雾情况时,会导致对应城市的所有航班的起飞及降落均停止(即不能从该城市出发,其他城市也不能到达该城市)。小K希望知道如果他需要到X城市出差时,如果遇到Y城市出现大雾,他最短的飞行时间及飞行路径。
注意:当两个城市间不可达时,消耗时间默认取1000.
各城市简的飞行时间如下表所示,加粗行代表始发城市,加粗列代表终点城市,矩阵中的值代表从始发城市飞到终点城市所耗时间(单位:小时),M代表不可达(注意飞行线程是单向的,即A->B不等于B->A),例如
(1)从1号城市飞行到4号城市花费5h,从4号城市飞到1号城市花费2h
(2)从5号城市飞行到3号城市不可达,从3号城市飞到5号城市花费7h
1 2 3 4 5 6
1 0h 2h 10h 5h 3h M
2 M 0h 12h M M 10h
3 M M 0h M 7h M
4 2h M M 0h 2h M
5 4h M M 1h 0h M
6 3h M 1h M 2h 0h
输入描述:
输入出差城市X(X可为1、2、3、4、6)
输入大雾城市(Y可为0、1、2、3、4、5、6,可为0时代表没有城市出现大雾)
代码如下:
1 import java.util.*; 2 3 public class Main2 { 4 private static int INF = 1000; 5 6 private static Integer[][] dist; 7 private static Integer[][] path; 8 9 private static List<Integer> result = new ArrayList<Integer>(); 10 //调试 11 public static void printMatrix(Integer[][] matrix) { 12 for (int i = 0; i < matrix.length; i++) { 13 for (int j = 0; j < matrix.length; j++) 14 System.out.print(matrix[i][j] + " "); 15 System.out.println(); 16 } 17 } 18 //设置雾城市 19 private static void setFog(int[][] matrix, int city) { 20 for (int i = 0; i < matrix.length; i++) { 21 matrix[i][city] = matrix[city][i] = INF; 22 } 23 } 24 25 public static void main(String[] args) { 26 27 int size = 6; 28 29 int begin = 4; 30 Scanner scan = new Scanner(System.in); 31 int end = Integer.parseInt(scan.nextLine()) - 1; 32 int foggy = Integer.parseInt(scan.nextLine()) - 1; 33 scan.close(); 34 35 int[][] matrix = { { 0, 2, 10, 5, 3, INF }, 36 { INF, 0, 12, INF, INF, 10 }, { INF, INF, 0, INF, 7, INF }, 37 { 2, INF, INF, 0, 2, INF }, { 4, INF, INF, 1, 0, INF }, 38 { 3, INF, 1, INF, 2, 0 } }; 39 init(size); 40 //没有雾 41 if (foggy != -1) 42 setFog(matrix, foggy); 43 //调用弗洛伊德 44 floyd(matrix); 45 46 findPath(begin, end); 47 System.out.println(dist[begin][end]); 48 for (int i = 0; i < result.size(); i++) 49 result.set(i, result.get(i) + 1); 50 if (dist[begin][end] == INF) 51 result.removeAll(result); 52 System.out.println(result); 53 } 54 //在path数组里找路径 55 public static void findPath(int i, int j) { 56 int ci = i, ccj = j; 57 while (path[i][j] != -1) { 58 int cj = path[i][j]; 59 result.add(cj); 60 i = cj; 61 } 62 result.add(0, ci); 63 result.add(ccj); 64 } 65 66 public static void floyd(int[][] matrix) { 67 int size = matrix.length; 68 for (int i = 0; i < size; i++) 69 for (int j = 0; j < size; j++) { 70 path[i][j] = -1; 71 dist[i][j] = matrix[i][j]; 72 } 73 for (int k = 0; k < size; k++) { 74 for (int i = 0; i < size; i++) { 75 for (int j = 0; j < size; j++) { 76 if (dist[i][k] != INF && dist[k][j] != INF 77 && dist[i][k] + dist[k][j] < dist[i][j]) { 78 dist[i][j] = dist[i][k] + dist[k][j]; 79 path[i][j] = k; 80 } 81 } 82 } 83 } 84 } 85 //初始化两个数组 86 public static void init(int size) { 87 path = new Integer[size][size]; 88 dist = new Integer[size][size]; 89 } 90 }
转载于:https://www.cnblogs.com/Jocelyn66/p/6687676.html
2017华为机试题--Floyd算法相关推荐
- 【牛客网】华为机试题(00、C++版本)
华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...
- 华为机试python编程题_牛客网华为机试题之Python解法
牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...
- 华为电脑c语言总是错误,关于华为机试题求代码!解决方法
关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...
- 牛客网华为机试题(JavaScript)
最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...
- 【牛客网-华为机试题目录】持续更新中
文章目录 博主精品专栏导航 华为机试题:HJ80 整型数组合并(python) 华为机试题:HJ76 尼科彻斯定理(python) 华为机试题:HJ73 计算日期到天数转换(python) 华为机试题 ...
- 华为机试题库+题解【C语言版】
文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...
- 【华为机试题分析-C/C++】知识点分类总结
专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...
- 【华为机试题分析】 4 字符串分割
我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...
- 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典
文章目录 2023 年用 Python 语言解华为 OD 机试题,一篇博客找全. 华为 OD 机试题清单(机试题库还在逐日更新) 2023 年用 Python 语言解华为 OD 机试题,一篇博客找全. ...
最新文章
- SQL优化:使用explain
- Arduino control Eeprom by IIC method of using device address in Arduino
- Nvidia Jetson TX2入门指南(白话版)
- Markdown编辑器:纯前端演示(可接入项目、含源码下载) - 总结篇
- linux计划任务一小时,linux,计划任务,每小时执行一次(共7篇).docx
- SPI、I2C、I2S
- 步态数据去噪滤波器之巴特沃斯滤波器
- 百度地图java批量获得经纬度_批量调用百度地图API获取地址经纬度坐标
- python爬虫,用scrapy爬取天天基金
- JS清除IE浏览器缓存的方法
- MYSQL 命令行大全 (简洁、明了、全面)
- 数据链路层学习之LLDP
- CentOS6 64位系统安装步骤
- 金仓数据库KingbaseES SYS_BULKLOAD工具的使用
- 股票短线详解,股票短线的方法技巧?
- 网易测试开发岗面试经历
- 分享快手极速版助手APK和源代码
- 09.12.15 转:什么是工作?我终于明白了
- 运筹说 第73期 | 图论创始人“数学之王”一 欧拉
- 计算机音乐实验报告,电脑音乐制作实验报告.doc
热门文章
- oracle 删序列,oracle创建和删除序列
- oracle的and怎么用,Oracle的BITAND的方法使用
- idea打不了断点红点没对号_你可能不知道的 IDEA 高级调试技巧
- java notserializableexception,java.io.NotSerializableException
- 海归计算机专业简历怎么写,海归硕士求职简历该怎么写?
- Flink学习笔记02:Flink三种运行模式
- 数学之美:欣赏超越数e
- 英语学习笔记2019-10-11
- 【BZOJ1038】【codevs1412】瞭望塔,半平面交/三分法
- 【BZOJ4128】Matrix,拔山盖世的矩阵乘法+随机化