文章目录
- 服务启动
服务启动
- 有若干连续编号的服务(编号从0开始),服务间有依赖关系,启动一个指定的服务,请判断该服务是否可以成功启动,并输出依赖的前置服务编号;
- 依赖关系是可以传递的,如2->1, 1->0, 则2依赖1和0;
输入描述:
第一行输入N,为服务的总个数,N在【1,5000】;
第二行输入M, 为指定启动的服务编号,M在【0, 5000);
接下来的N行为依赖关系,第一行为服务0的依赖,第二行为服务1的依赖,依次类推,格式:依赖服务个数,依赖编号,依赖编号…
输出描述:
如果服务无法启动(循环依赖)或者其他异常,输出-1
若可以启动,则按照编号从小到大顺序输出依赖的前置服务;若无依赖,则输出null
示例1
输入:
4
2
0
1,0
1,1
2,0,1
输出:
0,1
示例2
输入:
2
1
1,1
1,0
输出:
-1
python实现
- DFS, 递归函数栈
# 输入
n = int(input().strip())
specific_m = int(input().strip())
# 依赖关系
depend_dict = {}
for i in range(n):depend_dict[i] = list(map(int, input().strip().split(",")))# 依赖的列表
depend_list = []def dfs(m):global depend_dict, depend_list, specific_mcur_data = depend_dict.get(m)if cur_data[0] == 0: # 没有依赖关系,可以启动returnelse:for i in range(1, len(cur_data)):# 处理循环依赖if cur_data[i] == specific_m or cur_data[i] in depend_list:raise ValueError("循环依赖,无法启动")# 存储依赖depend_list.append(cur_data[i])# 递归调用dfs(cur_data[i])# 调用dfs
try:if n < 1 or n > 5000:raise ValueError("n 超出范围")elif specific_m < 0 or n >= 5000:raise ValueError("m 超出范围")dfs(specific_m)if depend_list: # 可以启动,并有前置依赖服务depend_list.sort()print(",".join([str(i) for i in depend_list]))else:print("null")
except ValueError:print(-1)