1. if 实现集合的划分

比如著名的 Prim 算法(最小生成树),从某一确定的点出发,每次新加入的点,都是在已访问过的结点(uU)和未访问过(vVU)的结点之间的边。这里的未被访问(VU)该如何实现呢?

可以使用集合(set)及其各种操作,也可以简单地使用 if + 状态进行判断:

mst = [None]*vnum
                # mst 为 None 表示尚未被访问
count = 0
cands = PrioQueue([0, 0, 0])
while count < vnum and not cands.is_empty():
    w, u, v = cands.dequeue()
    if mst[v]:
        continue
    mst[v] = ((u, v), w)
    for vi, w in graph.out_edges(v):
        if !mst[vi]:
            cands.enqueue((w, v, vi))
posted on 2016-09-02 12:45  未雨愁眸  阅读(128)  评论(0编辑  收藏  举报