全网最全面的华为OD机试真题汇总,100%原题题库,不需要开会员即可查看全部内容,更多考题请查看真题库。
真题库:https://www.yuque.com/codernav.com/od
题目:快递投放问题
知识点:图BFS搜索
时间限制:1s 空间限制:256MB 限定语言:不限
题目描述:
有N个快递站点用字符串标识,某些站点之间有道路连接。每个站点有一些包裹要运输,每个站点间的包裹不重复,路上有检查站会导致部分货物无法通行,计算哪些货物无法正常投递
输入描述:
第一行输入M N,M个包裹N个道路信息. 0<=M,N<=100,检查站禁止通行的包裹如果有多个以空格分开
4 2
package1 A C
package2 A C
package3 B C
package4 A C
A B package1
A C package2 package4
输出描述:
输出不能送达的包裹 package2 package4,如果所有包裹都可以送达则输出none,输出结果按照升序排列
示例1
输入:
4 2
package1 A C
package2 A C
package3 B C
package4 A C
A B package1
A C package2
输出:
package2
解题思路:
这道题的描述非常生硬难懂。博主按照自己的理解做了解答,大家可以多发表一下自己的看法。
前面M条数据是包裹的运输路径:例 package1 从A到C
后面N条数据是路径拦截的包裹:例 A到B 会拦截 packa
我们可以用map来记录包裹的运输路径和各路程拦截的包裹
代码实现:
package com.codernav.demo.hwod.exam;
import java.util.*;
/**
* @title 快递投放问题
* @Description 有N个快递站点用字符串标识,某些站点之间有道路连接。
* 每个站点有一些包裹要运输,每个站点间的包裹不重复,路上有检查站会导致部分货物无法通行,计算哪些货物无法正常投递。
* @Author 开发者导航
* @website https://codernav.com
* @date 2023/5/28
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int M = sc.nextInt();
int N = sc.nextInt();
sc.nextLine();
/**
* key:包裹名
* value:运输路径
*/
Map<String, String> mapPkg = new HashMap<>();
for (int i = 0; i < M; i++) {
String[] strings = sc.nextLine().split(" ");
mapPkg.put(strings[0], strings[1] + strings[2]);
}
/**
* key:路径名
* value:被拦截的包裹名
*/
Map<String, List<String>> mapNo = new HashMap<>();
for (int i = 0; i < N; i++) {
String[] strings = sc.nextLine().split(" ");
List<String> noList = new ArrayList<>();
for (int j = 2; j < strings.length; j++) {
noList.add(strings[j]);
}
mapNo.put(strings[0] + strings[1], noList);
}
List<String> resList = new ArrayList<>();
for (Map.Entry<String, List<String>> map : mapNo.entrySet()) {
String key = map.getKey(); //路径名
List<String> list = map.getValue(); //被拦截的包裹
for (String s : list) {
if (key.equals(mapPkg.get(s))) { //被拦截的包裹的运输路径等于此路径则表示包裹被拦截
resList.add(s);
}
}
}
System.out.println(resList);
}
}
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...
