
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.depth = 0 return root.neighbors().size() < 2 and is_biconnected(g, root) bool is_biconnected(graph g, vertex v) min-depth = v.depth for n in g.neighbors(v) if n.depth > -1 min-depth = min(min-depth, n.depth) else n.depth = v.depth + 1 if not is_biconnected(g, n) return false return min-depth < v.depth
|
|
graph spanning_tree(graph g)
queue unvisited(g.vertices().pick())
t.add_vertex(unvisited.head())
while not unvisited.empty()
v = unvisited.deq()
for n in g.neighbors(v)
if not t.vertices().member(n)
t.add_vertex(n)
t.add_edge(v, n)
unvisited.enq(n)
return t

|
|
|
graph mst(graph g)
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()
v = e.second()
if not mst.vertices().member(v)
mst.add_edge(e)
for n in g.neighbors(v)
if not mst.vertices().member(n)
minq.enq((v, n), g.weight(v, n))
return mst


mst() has O((V + E)log V) running time.

dist.
dist[vi] is the weight of the minimum path from
vs to vi.
min-path(graph g, vertex v1) unsigned dist[g.vertices().size()] = { ∞ } 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 if dist[v] > dist[e.first] + g.weight(e) 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.

parent.
parent[ve] and then take (parent[ve],
ve).

|
|
|
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

|
|
|
