bool connected(graph g) return g.vertices().size() = visit(g, g.vertices().pick()) int visit(graph g, vertex v) if not v.visited cnt = 1 v.visited = true for n in g.neighbors(v) cnt += visited(g, n) return cnt
|
|
bool biconnected(graph g) root = g.vertices().pick() root.visited = 0 return root.neighbors().size() < 2 and is_biconnected(g, root) bool is_biconnected(graph g, vertex v) min = v.visited for n in g.neighbors(v) if n.visited > -1 min = min(min, n.visited) else n.visited = v.visited + 1 if not is_biconnected(g, n) return false return min < v.visited
graph spanning_tree(graph g) queue pending(g.vertices().pick()) t.add_vertex(pending.head()) while not pending.empty() v = pending.deq() for n in g.neighbors(v) if not t.vertices().member(n) t.add_vertex(n) t.add_edge(v, n) pending.enq(n) return t
|
|
graph mst(graph g) graph mst min-queue minq vertex v = g.vertices().pick() for n in g.neighbors(v) minq.enq((v, n), g.weight(v, n)) while not minq.empty() e = minq.deq() mst.add_edge(e) for n in g.neighbors(e.second()) if not n mst.vertices().member(n) minq.enq((v, n), g.weight(v, n)) return msg
mst()
has O((V + E)log V) running time.
dist
.
dist[
vi]
is the weight of the minimum path from
v1 to vi.
min-path(graph g, vertex v1) unsigned dist[g.vertices().size()] = { 0 } min-queue minq for n in g.neighbors(v1) dist[n] = g.weight(v1, n) minq.enq((v1, n), g.weight(v1, n)) while not minq.empty() e = minq.deq() v = e.second dist[v] = dist[e.first] + g.weight(e) for n in g.neighbors(v) if not n mst.vertices().member(n) minq.enq((v,n), dist[v] + g.weight(v,n))
min-path()
has O((V + E)log V) running time.
|
|
list pert-sched(graph g, vertex v) return sched(g, v, list.create()).reverse() list sched(graph g, vertex v, list l) if not v.visited v.visited = true for n in g.neighbors(v) sched(g, n) return l.add(v)
|
|
list schedule(graph g) list sch while g.vertices().size() > 0 list tier for n in g.vertices() if g.in_degree(n) = 0 tier.add(n) g.remove(n) sch.add(tier) return sch
|
|