- 查找有效服务
(凭记忆描叙)有一系列的服务,例如a1,a2,a3,…等,a1-a2表示a1依赖a2,如果服务a2出错,那么a1也就不正常了,假设a1-a2,a2-a3, a3出错,或导致a1,a2都不正常,但如果只是a1出错,不会影响a2.
输入的第一行是依赖关系,第二行是出错的服务,以逗号隔开,例如:
输入:
a1-a2,a3-a4,a5-a6
a2,a5
输出(能正常运行的服务,按关系列表前后顺序)
a3,a4,a6
如果没有存活的服务,打印error
算法分析:
算法的关键点是要注意传递依赖关系,例如a1-a2,a2-a3这种。
算法描叙:在出错列表中,选择第一个出错服务ai,查找依赖列表,将所有依赖ai的关系找出来,例如aj-ai,将ai设置为ERROR(flag),并把aj加入到出错列表,知道所有错误服务都已查询,将关系列表中存活的服务打印出来即可。
package test;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Set;
import java.util.HashSet;
public class Main {
static final String flag = "error";
static class Relation{
String node;
String rNode;
public Relation(String node, String rNode) {
this.node = node;
this.rNode = rNode;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String relations = sc.nextLine();
String errors = sc.nextLine();
sc.close();
long startTime = System.currentTimeMillis();
ArrayList<String> errList = new ArrayList<>();
Collections.addAll(errList, errors.split(","));
ArrayList<Relation> rList = new ArrayList<>();
for(String relation:relations.split(",")) {
String rStr[] = relation.split("-");
rList.add(new Relation(rStr[0], rStr[1]));
}
Set<String> checked = new HashSet<>(