Python 实现:从排队关系中还原完整队列及注意要点
以下是使用 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. 对于输入的关系列表,要保证每个人的信息是唯一的,避免出现重复的人导致逻辑错误。 ######[AI写代码神器 | 515点数解答 | 2025-07-27 11:12:04]
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)478
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)362
- 工程师必知:软件系统用户文档编写九大要点揭秘(百度文心 | 350点数解答 | 2023-11-09 18:23:53)206
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)432
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)426
- 舞蹈班排队难题:计算婷婷身高排名的C++解法 (字节豆包 | 281点数解答 | 2025-01-14 10:49:34)236
- 舞蹈班排队难题:根据身高算出婷婷前后排队位置(附C++代码)(字节豆包 | 263点数解答 | 2025-01-14 10:49:37)205
- C++ 实现我的世界基岩版:从简单框架到开发要点揭秘(字节豆包 | 182点数解答 | 2025-02-22 15:53:11)208
- C++ 实现完整斗地主:含洗牌、发牌与手牌展示,可按需扩展!(字节豆包 | 1028点数解答 | 2026-01-10 08:02:37)47
- C#工程师必知:数组、链表、哈希、队列、栈数据结构优缺点大揭秘! (百度文心 | 561点数解答 | 2023-11-09 17:56:30)271
- 揭秘!十进制整数转其他进制用啥存储结构最合适?答案竟是它!(字节豆包 | 57点数解答 | 2024-11-13 01:21:11)249
- Java 实现仿 Windows 资源管理器:文件管理器功能全解析与代码示例(字节豆包 | 623点数解答 | 2025-01-01 14:59:04)264