def dijkstra_forward(nodes: list[Node], src_id: int, dst_id: int, hf=(lambda x: 0.0)) -> list[int]:
    "\n    'classical' forward Dijkstra but based on our iterator.\n    "
    coro = dijkstra_iterator(nodes, src_id, hf=hf)
    for ctx in coro:
        if (ctx.node is None):
            return ([], [])
        elif (ctx.node.id == dst_id):
            return (ctx.distances[dst_id], list(build_shortest_path(ctx.previous, dst_id, src_id)))
'classical' forward Dijkstra but based on our iterator.
def dijkstra_forward(nodes: list[Node], src_id: int, dst_id: int, hf=(lambda x: 0.0)) -> list[int]:
    "\n    \n    "
    coro = dijkstra_iterator(nodes, src_id, hf=hf)
    for ctx in coro:
        if (ctx.node is None):
            return ([], [])
        elif (ctx.node.id == dst_id):
            return (ctx.distances[dst_id], list(build_shortest_path(ctx.previous, dst_id, src_id)))