Paieška platyn ir gilyn

Paieška platyn

Paieškos platyn algoritmas taikomas trumpiausio kelio paieškai besvoriuose grafuose. Tam reikia prisiminti kiekvienos viršūnės tėvinę viršūnę ir skaičiuoti kokiu atstumu ji yra nutolusi nuo pradinės viršūnės. Grafo apėjimui naudosime eilę.

Turime tarpusavyje sukabintus žiedus. Duomenys yra duomenų faile. Pirmas skaičius - kiek yra žiedų (grafo viršūnės), antras - kiek yra sukabintų porų (grafo briaunos), sekančiose eilutėse - kaip jie sukabinti. Tokią grandinę naudodami duomenų faile esančius duomenis paverčiame besvoriniu grafu ir realizuojame gražia kaimynystės matrica. Kokia višūnė yra tėvinė duotai ir koks yra kelias iki jos?

Sukuriame struktūrą matricai nuskaityti. Papildomai įdedame failą darbui su eile

Prieš rašydami duomenis į matricą, ją išvalome suteikdami false reikšmes matricos laukams. Matricijoje, t.y. dvimačiame masyve nenaudojame 0 indekso, todėl sukuriama matrica 1 didesnė.

Galima kaimynystės matricą pamatyti konsolėje, ir įsitikiti ar viskas įrašyta gerai

Apeisime grafą naudodami eilę, tam ją reikia sukurti. Bet prieš tai, reikia sukurti porą masyvų: vienas skirtas tėvinėms viršūnėms saugoti, kitas laikyti apskaičiuotus atstumus nuo pradinės viršūnės. Juos užpildome keistomis reikšmėmis

Pasirenkame pradinę viršūnę ir dedame ją į eilę. Nustatome atstumą nuo pradinės, todėl 0.

Kol bus eilėje viršūnių, imsime pirmą, nepamiršdame ją pašalinti iš eilės, nes reiks imti sekančią įrašytą.Naudodami ciklą surasime kaimynines, įsidėmėdami jų tėvinių viršūnių numerius ir skaičiuodami atstumus. Jeigu viršūnė neplankyta ją dedame į eilę. Taip apeiname nutolusias per vieną briauną, paskai per dvi, tris ir t.t.

Pradinės viršūnė neturi tėvinės, todėl ir matome -1, o atstumai rodo trumpiausią kelią nuo pradinės viršūnės iki norimos. Šiame pavyzdyje du žiedai būtų nereikaligi, jei bandytumėme surasti trumpiausią kelią nuo 1 viršūnės iki 10.