02.02.2015 Views

Graafid Kui ühendada elemendid omavahel viitadega vabamal kujul ...

Graafid Kui ühendada elemendid omavahel viitadega vabamal kujul ...

Graafid Kui ühendada elemendid omavahel viitadega vabamal kujul ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Graafid</strong><br />

1<br />

3<br />

6<br />

9<br />

5<br />

2<br />

4<br />

7<br />

8<br />

10<br />

Joonis 4 Orienteeritud atsükliline graaf, mida saab topoloogiliselt sorteerida<br />

{Selle programmifragmendiga loendatakse kokku eellaste arv iga tipujaoks e mitu kaart suubub antud tippu.}<br />

for j:= 1 to m do<br />

for i:= 1 to m do<br />

if kylgnev[i,j]=1 then<br />

loendur[j]:=loendur[j]+1;<br />

Nüüd on iga tipu kohta kirjas tema vahetute eellaste arv. Kanname jadasse need tipud, millel loendur[i]=0 e millel<br />

pole eellasi.<br />

Järgnevalt on toodud Pascalis realiseeritud topoloogilise sorteerimise algoritm, mis töötab külgnevusmaatriksi peal.<br />

VeelOli:=true;<br />

while VeelOli do<br />

begin<br />

VeelOli:=false;<br />

for i:=1 to m do<br />

if loendur[i]=0 then<br />

begin<br />

{Trükitakse välja need, millel eellased puuduvad ja pannakse kirja, et need tipud on juba jadas (-1).}<br />

writeln(i);<br />

VeelOli:=true;<br />

loendur[i]:=-1;<br />

for j:=1 to m do<br />

{Vähendame loenduris nende elementide kordajaid, millistele jadasse pandud elmendid eellaseks olid.}<br />

if kylgnev[i,j]=1 then {i-nda tipu kohta käiv rida, j-ga on side}<br />

loendur[j]:=loendur[j]-1;<br />

end;<br />

end;<br />

Näites trükiti jada välja, kuid selle võib ka massiivi panna. Kindlasti ei saa seda algoritmi rakendada, kui graafis on<br />

tsükkel, kuid siis ei saa nagunii topoloogiliselt sorteerida.<br />

Eespool joonisel 3 oleva graafi kohta oleks külgnevate tippude loendamise massiiv järgmine:<br />

1 2 3 4 5 6 7 8 9 10<br />

0 1 1 1 2 2 2 0 2 1<br />

Kaks võimalikku väljundit oleksid:<br />

1 2 3 4 5 6 8 9 10 7<br />

8 1 3 2 4 5 6 9 7 10<br />

Huvitavaks probleemiks on veel, millal tipp kõige varem ja kõige hiljem sorteeritud jadasse sattuda saab. Sellist<br />

teadmist võib vaja olla tööde planeerimise ülesande juures.<br />

10

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!