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.')
Beispiel #2
0
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