
 
目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、Java算法源码
- 五、效果展示
- 1、输入
- 2、输出
 
 
一、题目描述
有N个快递站点用字符串标识,某些站点之间有道路连接。每个站点有一些包裹要运输,每个站点间的包裹不重复,路上有检查站会导致部分货物无法通行,计算哪些货物无法正常投递。
二、输入描述
第一行输入M N,M个包裹N个道路信息。
0<=M,N<=100,检查站禁止通行的包裹如果有多个以空格分开。
三、输出描述
输出不能送达的包裹 package2 package4,如果所有包裹都可以送达则输出none,输出结果按照升序排列
四、Java算法源码
public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    // M个包裹
    int M = sc.nextInt();
    // N个道路
    int N = sc.nextInt();
    sc.nextLine();
    /**
     * key:包裹名
     * value:运输路径
     */
    Map<String, String> mapOk = new HashMap<>();
    for (int i = 0; i < M; i++) {
        String[] strings = sc.nextLine().split(" ");
        mapOk.put(strings[0], strings[1] + strings[2]);
    }
    /**
     * key:路径名
     * value:被拦截的包裹名
     */
    Map<String, List<String>> mapNg = 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]);
        }
        mapNg.put(strings[0] + strings[1], noList);
    }
    List<String> retList = new ArrayList<>();
    for (Map.Entry<String, List<String>> map : mapNg.entrySet()) {
        // 路径名
        String key = map.getKey();
        // 被拦截的包裹
        List<String> list = map.getValue();
        for (String s : list) {
            // 被拦截的包裹的运输路径等于此路径则表示包裹被拦截
            if (key.equals(mapOk.get(s))) {
                retList.add(s);
            }
        }
    }
    System.out.println(retList);
}
五、效果展示
1、输入
4 2
 package1 A C
 package2 A C
 package3 B C
 package4 A C
 A B package1
 A C package2
2、输出
package2

🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JAVA)(2022&2023)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。










![[软件工具]姓氏谐音梗随机生成工具使用教程](https://i0.hdslb.com/bfs/archive/1373a7c71fa54b2707f9b430c59a36d597059301.jpg@100w_100h_1c.png@57w_57h_1c.png)









