We have a job definition as follows:
from __future__ import annotations
from dataclasses import dataclass
from typing import List
@dataclass
class Job:
name: str
cmd: str
deps: List[Job]
We want to implement a method that takes a set of job definitions and prints all of the commands:
def print_jobs(jobs: List[Job]):
pass
Examples for the candidate:
# No commands / null
print_jobs([])
Result:
# Single command
a = Job(name="a", cmd="1", deps=[])
print_jobs([a])
Result:
Command is: 1
# Single command w/dependencies
a = Job(name="a", cmd="1", deps=[])
b = Job(name="b", cmd="2", deps=[a])
print_jobs([b])
Result:
Command is: 1
Command is: 2
# Two commands w/dependencies and not all jobs are in original list
a = Job(name="a", cmd="1", deps=[])
c = Job(name="c", cmd="3", deps=[])
b = Job(name="b", cmd="2", deps=[a, c])
print_jobs([a, b])
Result:
Command is: 1
Command is: 1
Command is: 3
Command is: 2
这道题本质上是一个依赖图的遍历与拓扑输出问题:每个 Job 可能依赖其他 Job,而打印顺序必须先输出所有前置依赖,再输出当前 Job 自己的命令。由于依赖关系可能形成一棵树或有共享子依赖,通常需要用 DFS 递归遍历,并配合 visited 集合避免重复展开同一个节点;如果题目默认不存在环,还可以直接按依赖优先的后序遍历实现。示例中即使传入的 jobs 列表里没有包含所有依赖节点,也要把依赖链上的命令一并打印出来。
正文完