def simulation(total_seconds, pages_per_minute): queue, wait_times = Queue(), [] printer = Printer(pages_per_minute) for second in range(total_seconds): if new_print_task(): queue.enqueue(Task(second)) if not printer.busy() and not queue.is_empty(): task = queue.dequeue() wait_times.append(task.wait_time(second)) printer.start_next(task) printer.tick() print(f'Average Wait {sum(wait_times) / len(wait_times):6.2f} secs {queue.size():2d} tasks remaining.')
def bfs(g: Graph, start, end) -> int: start_vertex = g.get_vertex(start) end_vertex = g.get_vertex(end) if start_vertex is None or end_vertex is None: raise ValueError(f'{start}或{end}不在单词表中') queue, found = Queue(), False queue.enqueue(start_vertex) while not queue.is_empty() and not found: vertex: Vertex = queue.dequeue() for neighbor in vertex.connect: if neighbor.color == 'white': neighbor.color = 'gray' neighbor.predecessor = vertex neighbor.distance = vertex.distance + vertex.get_weight( neighbor) queue.enqueue(neighbor) # 找到目标时提前退出 # if neighbor is end_vertex: # found = True vertex.color = 'black' return end_vertex.distance