Router algoritmust keresek - OFFTO

Kis Norbert norbi at kzs.hu
Mon Mar 6 14:27:11 CET 2000


Szia!

Koszi a segitseget mindenkinek. Volt, aki komplett algoritmust is kuldott
maganban. Vegul
a hetvegen -ket nap agyalas utan- talaltam egy viszonylag gyors, de
ugyanakkor egyszeru megoldast. Egy viszonylag kicsi router tablaban kell
lepkedni csak jobbra-balra, illeve scrollozni a tabla oszlopait eggyel
felfele.

Mellekelem is a parsoros algoritmust, de csatolva, hogy a tablazatok
olvashatok maradjanak.
Lehetna meg szepiteni rajta, de ez eleg konnyen leprogramozhato, s eleg
hatekony kodot is ad.
Eloszor FILE-ba akartam letarolni egyszer a variaciokat, de annyira gyors
lesz, hogy realtime is megfelelo, ha ASM-ben csinalom meg. (Remelem,
RB-ektol nem kapok irgumburgumot a csatolas miatt, mert igen rovid, es
tenyleg maskepp olvashatatlan lenne.)

Az altalatok leirt tippek baja az, hogy vagy az osszes kombinaciot kepezik,
es utolag
dontenek, hogy jo-e celnak. Vagy a masik, hogy nem mindig jarjak be az
osszes, lehetseges utat.
Az elso baja, hogy hatalmas memoria kell, ami ebben az esetben nincs, a
masodik pedig csak reszmegoldast ad. Viszont mindkettoben kozos, hogy
rengeteg adatot kell megmozgatni...

>Ha labirintusrol van szo, akkor egy matrixban tarolom a csomopont fajtajat.
>Lehet kereszt, balra fordul, jobbra fordul es tovabb egyenesen.

Plusz ehhez jon a T-elagazas nalam. :-)

>Keszitek egy rekurziv algoritmust, amely minden pontra megadja a lehetseges
>tovabblepesek koordinatajat (a lepessel elert uj csomopontot). A
csomopontokat
>feljegyzem es az osszes lista kozul kivalasztom azt (azokat) amelyek a
>legrovidebbek es elerik a celt.

Az enyem is hasonloan mukodik, de nem tarolom a teljes listat, mert az marha
nagy lenne. Helyette azt csinalom, hogy egy ROUTER-tablazatban lepkedek
jobbra, es az elozo poziciobol kiindulo szomszedvektorokat egymas alatti
helyekre szepen bejegyzem. 
Ezutan leptetek 1-el jobbra. (LEPES++)
Mivel nalam 4-irany van, ezert a negy soros tabla eleg. Az otodik csak
gyorsitasra kell, hogy igy -minden lepesnel vizsgalt adat helyett- gyorsabb
legyen a rutin. Ezutan celvizsgalat kovetkezik. Ha celt ertem, akkor a
legfelso sorat kiirom a router tablanak, (igy tarolni se kell tovabb a
RAM-ban) s a tovabbiakban ugy jarok el, mintha foglaltba utkoztem volna.
(maximalis hossz a szomszedvektorszam, azaz 64) Persze lehet, hogy 24 is
eleg lenne, hiszen foglalt elemen ugysem mehetek at... A feltoltetlen
elemeket termeszetesen 0-k reprezentaljak, amikkel indulas elott a ROUTER
tombot feltoltom.
S most jon a trukk: Ha olyan elem jott a kepbe, ami foglalt, akkor elugrok a
visszalepteto agra. Ha nem, akkor novelem a lepes-t 1-el, azaz jobbra lepek
a ROUTER tablazatban a kovetkezo oszlopra.

A visszalepteto rutin megintcsak parsoros. (5-sor!) A kovetkezokeppen
mukodik:
Eloszor is scrollozza felfele az adott ROUTER(lepes) oszlop sorat, igy az
utkozest okozo elem kiesik, s a negyedik elembe ures, azaz nulla ertek
shiftelodik be. Ha a kapott ertek nem nulla, akkor visszalepek a rendes
elore lepteto reszre, hiszen ez egy masik elagazas, lehet belole kiindulva
elore lepkedni! Elotte termeszetesen az otodik sor foglaltsagi elemet
modositjuk...

Ha a kapott ertek nulla, akkor ebben az oszlopban mar nincs tobb elagazasi
elem, tehat vissza kell leptetni a mutatot 1-el, es a fenti scroll-ra
ugrani. (Azaz: az elozo elagazasnal masik iranyba fordulunk.)

Mielott a scrollra ugranank, azonban megvizsgaljuk, hogy elertuk-e az elso
oszlopot! Ha igen, akkor ez utunk veget jelenti, hiszen valamennyi
lehetseges utvonalat bejartuk, igy a ROUTER alprogram futasa veget ert.

Hmm... Hat ennyi, meg ket atalvatlan ejszaka.... Igy elmondani nem is
bonyolult. :-))))

>A routert irsz, akkor az RT-ben volt kozolve egy NYAK-tervezo. Abban le
volt
>irva egy algoritmus. Valahogy ugy mukodott, hogy a kiindulasi pontbol az
osszes

Emlekeszem en is a cikkre, de ott eleg bonyolult volt a program, es igen
nagy tombmeretekkel dolgozott. Most nem paneltervezeshez kell a router,
hanem egy par (24) csomopontbol allo, osszesen 64-szomszedvektort tartalmazo
listahoz. Viszont sajnos _valamennyi_ variacio kell, me'g a legkevesbe
optimalisak is, amik hurkot nem tartalmaznak.

>visszafele megkeresheto. Ha nem talalod az illeto RT-t, akkor
megkereshetem.

Koszi, megvan. Azert kivancsisagbol megnezem, mekkora az O programjuk. (Az
enyem BASIC-ben megirva 15...20 sor, es mukodik! :-) )

>Remelem segitettem...
>Veres Sandor

Igen, koszi Neked, meg Toreki Attilanak is a segitseget. Ha nagyobb
autoroutert kell irnom, akkor valoszinuleg ujra eloveszem a most tanultakat,
koszi megegyszer.


Udvozlettel:
			Norbi.

-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: ROUTER.TXT
Url: http://www.centralnet.hu/pipermail/elektro/attachments/20000306/ee2a115b/attachment.ksh 


More information about the Elektro mailing list