小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算法相关推荐

  1. 【牛客网】华为机试题(00、C++版本)

    华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...

  2. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  3. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法

    关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...

  4. 牛客网华为机试题(JavaScript)

    最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...

  5. 【牛客网-华为机试题目录】持续更新中

    文章目录 博主精品专栏导航 华为机试题:HJ80 整型数组合并(python) 华为机试题:HJ76 尼科彻斯定理(python) 华为机试题:HJ73 计算日期到天数转换(python) 华为机试题 ...

  6. 华为机试题库+题解【C语言版】

    文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...

  7. 【华为机试题分析-C/C++】知识点分类总结

    专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...

  8. 【华为机试题分析】 4 字符串分割

    我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...

  9. 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典

    文章目录 2023 年用 Python 语言解华为 OD 机试题,一篇博客找全. 华为 OD 机试题清单(机试题库还在逐日更新) 2023 年用 Python 语言解华为 OD 机试题,一篇博客找全. ...

最新文章

  1. SQL优化:使用explain
  2. Arduino control Eeprom by IIC method of using device address in Arduino
  3. Nvidia Jetson TX2入门指南(白话版)
  4. Markdown编辑器:纯前端演示(可接入项目、含源码下载) - 总结篇
  5. linux计划任务一小时,linux,计划任务,每小时执行一次(共7篇).docx
  6. SPI、I2C、I2S
  7. 步态数据去噪滤波器之巴特沃斯滤波器
  8. 百度地图java批量获得经纬度_批量调用百度地图API获取地址经纬度坐标
  9. python爬虫,用scrapy爬取天天基金
  10. JS清除IE浏览器缓存的方法
  11. MYSQL 命令行大全 (简洁、明了、全面)
  12. 数据链路层学习之LLDP
  13. CentOS6 64位系统安装步骤
  14. 金仓数据库KingbaseES SYS_BULKLOAD工具的使用
  15. 股票短线详解,股票短线的方法技巧?
  16. 网易测试开发岗面试经历
  17. 分享快手极速版助手APK和源代码
  18. 09.12.15 转:什么是工作?我终于明白了
  19. 运筹说 第73期 | 图论创始人“数学之王”一 欧拉
  20. 计算机音乐实验报告,电脑音乐制作实验报告.doc

热门文章

  1. oracle 删序列,oracle创建和删除序列
  2. oracle的and怎么用,Oracle的BITAND的方法使用
  3. idea打不了断点红点没对号_你可能不知道的 IDEA 高级调试技巧
  4. java notserializableexception,java.io.NotSerializableException
  5. 海归计算机专业简历怎么写,海归硕士求职简历该怎么写?
  6. Flink学习笔记02:Flink三种运行模式
  7. 数学之美:欣赏超越数e
  8. 英语学习笔记2019-10-11
  9. 【BZOJ1038】【codevs1412】瞭望塔,半平面交/三分法
  10. 【BZOJ4128】Matrix,拔山盖世的矩阵乘法+随机化