]> mj.ucw.cz Git - ads1.git/commitdiff
4: mosty
authorJan 'Moskyt' Matejka <moskyto@atrey.karlin.mff.cuni.cz>
Mon, 20 Jun 2011 16:12:40 +0000 (18:12 +0200)
committerJan 'Moskyt' Matejka <moskyto@atrey.karlin.mff.cuni.cz>
Mon, 20 Jun 2011 16:12:40 +0000 (18:12 +0200)
4-dfs/4-dfs.tex

index f8af8bbf106b102f20101b5e054814e1a10463c5..6e825331c6a019b91b86d3ae922919f9fa851296 100644 (file)
@@ -151,5 +151,38 @@ D
 \algout Obsah zásobníku $Z$ (nalezený cyklus).
 \endalgo
 
+\h{Hledání mostù v neorientovaném grafu}
+
+\s{Definice:} Hrana $(u,v) \in E(G)$ je {\I most}, pokud se jejím odebráním
+z~grafu $G$ zvý¹í poèet komponent souvislosti tohoto grafu.
+
+\s{Pozorování:} Hrana, která je v nìjakém cyklu, nemù¾e být mostem. Cyklus je
+toti¾ sám o~sobì 2-souvislý. V¹echny ostatní hrany naopak mosty jsou.
+
+Hledáme tedy v¹echny hrany, které nejsou v ¾ádném cyklu. Projdeme graf zase
+pomocí DFS, které bude upravené tak, ¾e ka¾dému vrcholu $v$ pøiøadí
+navíc~$h(v)$ -- hloubku ve stromì DFS.
+
+Kdy je hrana $(u,v)$ v nìjakém cyklu? Kdy¾ existuje cesta $v\dots w$ (a nebo
+$v=w$), zpìtná hrana $(w,x)$ a cesta $x\dots u$ (a nebo $x=u$).
+
+\s{Algoritmus} bude je¹tì trochu více upravené DFS. Pro ka¾dý vrchol~$v$ si
+budeme kromì hloubky je¹tì pamatovat nejmen¹í hloubku~$z(v)$, do které z~jeho
+podstromu vedou zpìtné hrany.
+
+Jak spoèítáme $z(v)$?
+
+\algo
+\:Vstoupíme do vrcholu $u$ jako DFS, nastavíme $h(u)$.
+\:$x \la $~minimum z $h(v)$ pøes v¹echny zpìtné hrany $(u,v)$
+\:$y \la $~minimum ze $z(w)$ pøes v¹echny stromové hrany $(u,w)$
+\:$z(u) = \min (x,y)$
+\:Pokud $z(u) \ge h(u)$,
+\::je jistì mostem hrana, po které jsme vstoupili do $u$.
+\endalgo
+
+Mù¾e být mostem jiná hrana ne¾ stromová? Zpìtné hrany nutnì tvoøí cyklus.
+Pøíèné a dopøedné se v neorientovaném DFS neobjeví.
+\qed
 
 \bye