华为2017实习生上机笔试_当出差遇上大雾_Java编程

出差问题:

1、共有6个城市,某员工现从5号城市,到endCity出差;

2、如果一个城市遇上大雾,则该城市(既不能到达,也不能离开);

3、给定距离矩阵useHours[][6] = {

0,2,10,5,3,INF,

INF,0,12,INF,INF,10,

INF,INF,0,INF,7,INF,

2,INF,INF,0,2,INF,

4,INF,INF,1,0,INF,

3,INF,1,INF,2,0,};

其中单位为小时,INF为1000小时

4、输入:目的地和大雾城市;

5、输出最短路径长度和路径,无法到达输出-1;

实例:

输入:

2

4

输出:

6

[5 1 2]

 java编程

import java.util.*;

public class Main {

private static int INF = 1000;

private static Integer[][] dist;

private static Integer[][] path;

private static List<Integer> result = new ArrayList<Integer>();

//调试

public static void printMatrix(Integer[][] matrix) {

for (int i = 0; i < matrix.length; i++) {

for (int j = 0; j < matrix.length; j++)

System.out.print(matrix[i][j] + " ");

System.out.println();

}

}

//设置雾城市

private static void setFog(int[][] matrix, int city) {

for (int i = 0; i < matrix.length; i++) {

matrix[i][city] = matrix[city][i] = INF;

}

}

public static void main(String[] args) {

int size = 6;

int begin = 4;

Scanner scan = new Scanner(System.in);

int end = Integer.parseInt(scan.nextLine()) - 1;

int foggy = Integer.parseInt(scan.nextLine()) - 1;

scan.close();

int[][] matrix = { { 0, 2, 10, 5, 3, INF },

{ INF, 0, 12, INF, INF, 10 }, { INF, INF, 0, INF, 7, INF },

{ 2, INF, INF, 0, 2, INF }, { 4, INF, INF, 1, 0, INF },

{ 3, INF, 1, INF, 2, 0 } };

init(size);

//没有雾

if (foggy != -1)

setFog(matrix, foggy);

//调用弗洛伊德

floyd(matrix);

findPath(begin, end);

System.out.println(dist[begin][end]);

for (int i = 0; i < result.size(); i++)

result.set(i, result.get(i) + 1);

if (dist[begin][end] == INF)

result.removeAll(result);

System.out.println(result);

}

//在path数组里找路径

public static void findPath(int i, int j) {

int ci = i, ccj = j;

while (path[i][j] != -1) {

int cj = path[i][j];

result.add(cj);

i = cj;

}

result.add(0, ci);

result.add(ccj);

}

public static void floyd(int[][] matrix) {

int size = matrix.length;

for (int i = 0; i < size; i++)

for (int j = 0; j < size; j++) {

path[i][j] = -1;

dist[i][j] = matrix[i][j];

}

for (int k = 0; k < size; k++) {

for (int i = 0; i < size; i++) {

for (int j = 0; j < size; j++) {

if (dist[i][k] != INF && dist[k][j] != INF

&& dist[i][k] + dist[k][j] < dist[i][j]) {

dist[i][j] = dist[i][k] + dist[k][j];

path[i][j] = k;

}

}

}

}

}

//初始化两个数组

public static void init(int size) {

path = new Integer[size][size];

dist = new Integer[size][size];

}

}

时间: 2024-08-04 06:22:34

华为2017实习生上机笔试_当出差遇上大雾_Java编程的相关文章

腾讯2017秋招笔试_素数对 java程序

[编程题] 素数对 时间限制:1秒 空间限制:32768K 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果.输入值小于1000. 如,输入为10, 程序应该输出结果为2.(共有两对质数的和为10,分别为(5,5),(3,7)) 输入描述: 输入包括一个整数n,(3 ≤ n < 1000) 输出描述: 输出对数 输入例子1: 10 输出例子1: 2 Java源码  import java.util.Scanner; import java.util.TreeSet;

华为校招上机笔试试题(A卷)——java实现

华为校招上机笔试试题(A卷)--java实现 编程题:A1.最小长方形, A2. 判断一个数字中是否包含两个相同的子串, A3. 取石子游戏. A1.最小长方形 java代码: import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class MinRectangle { public static void main(String arg[]){ List<Integer> ld

2017 校招网上笔试题目

2017 校招网上笔试题目 做了一下某大厂的笔试的题目 1. 一个表, visit(cookie_id, area1, area2, date) 给出各种查询策略中, 哪一种最好,每一条SQL语句大同小异, 几乎看不出区别, 还有6,7个选项,同时字数很长.一般的SQL语句好像有根据查询的嵌套顺序来比较差异的,但是这道题反而没有.反正蒙了一个.没有数字可算,心里没有底,应该证明了SQL语法可能会很大地影响查询效率. 2. 给了几个条件,判断你的名次.又是球赛的问题,考查你的推理能力. 3. en

美团点评2017秋招笔试编程题

美团点评2017秋招笔试编程题 1, 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步.求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法. 题解: 写出前面的几个, 1 -> 1;   2 -> 2 ;  3 -> 4;   4 -> 8; 5 -> 16; 6 -> 32; 可以得到是 二的 n-1 次幂. #include <cstdio> int

好未来2017秋招笔试真题二 --牛客网

好未来2017秋招笔试真题二 --牛客网 链接:https://www.nowcoder.com/questionTerminal/ee5de2e7c45a46a090c1ced2fdc62355来源:牛客网 将一句话的单词进行倒置,标点不倒置.比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割 输入例子: I

网易2017春招笔试真题编程题集合题解

01 双核处理 题目 一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务.n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间. 输入描述 输入包括两行:第一行为整数n(1 ≤ n ≤ 50)第二行为n个整数lengthi,表示每个任务的长度为length[i]kb,每个数均为1024的倍数. 输出描述输出一个整数,表示最少需

python基础教程_学习笔记26:好玩的编程

好玩的编程 程序设计的柔术 当大家坐下来并计划应该如何组织程序的时候,对于这个具体的程序,还没有任何的经验.在实现功能的时候,会逐渐地学到对原始设计有用的新知识.不应该无视一路走来所吸取的教训,而应该将它们用于软件的重新设计(或重构)中. 灵活性的实现包括许多方面,下面是其中两个: 原型设计:python最棒的功能之一就是可以快速地编写程序.编写原型程序是更充分地了解问题的一种很好的方法. 配置:灵活性有很多种存在形式.配置的目的就是让程序某部分的改变更简单,对于你和用户来说都是这样. 第三点是

2017白条套现秒到方法(规避上征信)京东白条自己能套现

2017白条套现秒到方法(规避上征信)京东白条自己能套现 近日,京东金融在官方微博上证实,包括金条.白条.京农贷业务均已启动征信接入工作,也就是说,若开通上述业务,那么均会上报至你在人行的信用报告中. 对此,我们主要关注的是以下几点: 1.白条每月更新一次信报 比苏宁"任性付"好一点的是,京东白条不会将每一笔消费都体现在信报上,而是每月按账单更新负债情况(更正:苏宁已于 2017 年 8 月起,对客户的多笔贷款记录予以合并上报人行征信系统,不再逐笔展示客户贷款信息.).然而,京东金融官

2016华为校招上机笔试练习题

1.最高分是多少 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ int n,m; while(scanf("%d %d",&n,&m)!=EOF){ int *score = (int*)malloc(sizeof(int)*n); int res[5000]; int cnt = 0; for(int i=0; i<n; i++)