algorithm - Collapse vertices after Tarjan found the strongly connected component -
suppose there many vertices value in circled graph.
after using tarjan find out these sccs, want turn each whole scc two vertices(not one), 1 highest value among vertices in scc , lowest value.
let vertices connected scc point vertex lowest value, , let vertices pointed @ scc pointed @ vertex highest value.
that is, 1(4) -> 2(3) <-> 3(5) -> 5(1) <-> 4(6) -> 1(4), weights in parentheses, circle. want translate 1(4) -> 2(3) -> 3(5) -> 4(1) -> 5(6) , 1(4) -> 4(1)
but cannot figure out how implement this, please help.
i'm using c , adjacency list store graph.
sorry poor english, hope it's clear enough understood.
the following ideas should started:
- denote original graph
g, scc sets, , new graph of interconnected sccssg. - you need mappings of vertices scc
scc: v(g) -> s, , of sccs min , max valued verticesmin/max: s -> v(g), can built during tarjan scc construction. - set vertices of
sgimage of min/max. - afterwards you'll build
sgiterating on edges(u,v)ine(g)creating edge(max(scc(u)),min(scc(v)))ine(sg)each of them unless exists. - for each scc
sinsadd(min(s), max(s))e(sg).
you need think how resolve ties among max-/min-valuesd nodes in scc.
Comments
Post a Comment