题目描述
有N个快递站点用字符串标识,某些站点之间有道路连接。每个站点有一些包裹要运输,每个站点间的包裹不重复,路上有检查站会导致部分货物无法通行,计算哪些货物无法正常投递。
输入描述
第一行输入M N,M个包裹N个道路信息. 0 <= M, N <= 100,检查站禁止通行的包裹如果有多个以空格分开
4 2 //4个包裹和2条道路信息
package1 A C //包裹 和 期望运输路线
package2 A C
package3 B C
package4 A C
A B package1 //运输路线 和 禁止通行的包裹
A C package2 package4
输出描述
输出不能送达的包裹
package2 package4
如果所有包裹都可以送达则输出none,
输出结果按照升序排列
代码实现
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
String[] nums = scanner.nextLine().split(" ");
//包裹数量
int m = Integer.parseInt(nums[0]);
//道路信息数量
int n = Integer.parseInt(nums[1]);
//存储包裹和期望运输路线
Map<String, String> hope = new HashMap<>();
for (int i = 0; i < m; i++) {
String[] lines = scanner.nextLine().split(" ");
hope.put(lines[0], lines[1] + "-" + lines[2]);
}
//存储最终无法正常投递的包裹
Set<String> forbid = new HashSet<>();
for (int i = 0; i < n; i++) {
//获取某运输路线及其禁止运输的包裹
String[] lines = scanner.nextLine().split(" ");
String salution = lines[0] + "-" + lines[1];
for (int j = 2; j < lines.length; j++) {
String key = lines[j];
String value = hope.get(key);
//如果该路线禁止运输的包裹与期望该路线运输的包裹一致,则该包裹无法正常投递
if (value != null && value.equals(salution)) {
forbid.add(key);
}
}
}
//输出结果
for (String res : forbid) {
System.out.print(res + " ");
}
}
}
}