From: Jan 'Moskyt' Matejka Date: Mon, 20 Jun 2011 16:12:40 +0000 (+0200) Subject: 4: mosty X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=6ac344caafb862d21a521ca1abea157ab4fbef29;p=ads1.git 4: mosty --- diff --git a/4-dfs/4-dfs.tex b/4-dfs/4-dfs.tex index f8af8bb..6e82533 100644 --- a/4-dfs/4-dfs.tex +++ b/4-dfs/4-dfs.tex @@ -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