以下是使用 Python 实现的解决方案,我们可以通过构建一个字典来存储每个人与排在自己之前的人的关系,然后通过遍历找到队首元素,再根据关系依次还原出整个队列。 ```python def restore_queue(relations): # 用于存储每个人与排在自己之前的人的关系 prev_dict = {} # 用于存储所有人的集合 all_people = set() # 遍历关系列表,构建 prev_dict 并收集所有人 for person, prev in relations: prev_dict[person] = prev all_people.add(person) all_people.add(prev) # 找到队首元素,队首元素是没有其他人排在其前面的人 first_person = None for person in all_people: if person not in prev_dict: first_person = person break # 开始还原队列 queue = [first_person] current = first_person while current in prev_dict: current = prev_dict[current] queue.append(current) return queue # 示例关系列表,(person, prev) 表示 person 排在 prev 之后 relations = [('B', 'A'), ('C', 'B'), ('D', 'C')] result = restore_queue(relations) print(result) ``` 代码注释说明: 1. `prev_dict`:用于存储每个人与排在自己之前的人的关系,键为当前人,值为排在其前面的人。 2. `all_people`:存储所有涉及到的人,通过遍历关系列表收集。 3. 找到队首元素:队首元素是没有其他人排在其前面的人,即不在 `prev_dict` 中的人。 4. 还原队列:从队首元素开始,根据 `prev_dict` 依次找到排在后面的人,直到没有后续关系为止。 额外需要注意的逻辑点: 1. 确保输入的关系列表是合法的,即不会出现循环依赖的情况,否则会导致无限循环。 2. 当输入的关系列表为空时,需要考虑特殊情况,此时可以直接返回空列表。 3. 对于输入的关系列表,要保证每个人的信息是唯一的,避免出现重复的人导致逻辑错误。 [2025-07-27 11:12:04 | AI写代码神器 | 515点数解答]