www.wikidata.uk-ua.nina.az
Hvilovij algoritm Algoritm Li algoritm sho dozvolyaye znajti minimalnij shlyah v grafi z rebrami odinichnoyi dovzhini Zasnovanij na algoritmi poshuku v shirinu Zastosovuyetsya dlya znahodzhennya najkorotshogo shlyahu v grafi v zagalnomu vipadku znahodit lishe jogo dovzhinu Rezultat roboti algoritmu ortogonalnij shlyah Rezultat roboti algoritmu ortogonalno diagonalnij shlyah Zmist 1 Sut algoritmu 2 Riznovidi 3 Praktichne zastosuvannya 4 Opis algoritmu 5 Priklad realizaciyi 6 Div takozh 7 Literatura 8 PosilannyaSut algoritmu red Na dvovimirnij karti matrici sho skladayetsya z prohidnih i neprohidnih komirok poznachena komirka startu i komirka finishu Meta algoritmu proklasti najkorotshij shlyah vid komirki startu do komirki finishu yaksho ce zvichajno mozhlivo Vid startu u vsi napryami poshiryuyetsya hvilya prichomu kozhna projdena hvileyu komirka poznachayetsya yak projdena Hvilya u svoyu chergu ne mozhe prohoditi cherez komirki pomicheni yak projdeni abo neprohidni Hvilya ruhayetsya poki ne dosyagne tochki finishu abo poki ne zalishitsya neprojdenih komirok Yaksho hvilya projshla vsi dostupni komirki ale tak i ne dosyagla tochki finishu znachit shlyah vid startu do finishu proklasti nemozhlivo Pislya dosyagnennya hvileyu finishu prokladayetsya shlyah v zvorotnomu napryami vid finishu do startu i zberigayetsya v masivi Riznovidi red Zapovnennya po matrici v 4 napryamkah okolicya fon Nejmana vin zhe algoritm Li tochnishij ale mensh shvidkij metod i 1 i 1 i i 1 i 1 Zapovnennya po matrici v 8 napryamkiv okolicya Mura bilsh shvidkij ale mensh tochnij metod Shlyah po diagonali priblizno v 1 4 razi dovshij nizh po gorizontali j vertikali same tomu komirki roztashovani po diagonali mayut koeficiyent 3 a po gorizontali j vertikali koeficiyent 2 i 3 i 2 i 3 i 2 i i 2 i 3 i 2 i 3 Isnuye takozh algoritm A A star napravlenij hvilovij algoritm Praktichne zastosuvannya red nbsp Hvilovij algoritm odin z osnovnih pri avtomatizovanomu trasuvanni rozvodci drukovanih plat Vin maye dosit veliku kilkist riznomanitnih modifikacij sho dozvolyayut pokrashiti znajdenij rozv yazok z tochki zoru zatrat pam yati ta shvidkodiyi Takozh odne z harakternih zastosuvan hvilovogo algoritmu poshuk najkorotshoyi vidstani na karti v strategichnih komp yuternih igrah Opis algoritmu red Algoritm skladayetsya z kilkoh etapiv sered yakih osnovnimi mozhna vidiliti nastupni pidgotovchij etap etap poshirennya hvili ta etap pobudovi shlyahu Na pidgotovchomu etapi provoditsya analiz komirok sho prisutni na karti viznachayutsya zajnyati komirki Reshta komirok poznachayutsya yak vilni yim prisvoyuyetsya vaga 0 V lichilnik krokiv K zapisuyetsya 1 Etap poshirennya hvili polyagaye u znahodzhenni tochki finishu shlyahom pereboru susidnih komirok ta prisvoyennya yim vidpovidnoyi vagi V pershu chergu pereviryayutsya vsi komirki sumizhni z pochatkovoyu Yaksho komirka maye vagu 0 yij prisvoyuyetsya znachennya z lichilnika krokiv Komirki z inshoyu vagoyu zapovneni na poperednih krokah a takozh komirki vidmicheni yak zajnyati zalishayutsya bez zmin Yaksho odna z komirok ye tochkoyu finishu algoritm perehodit na nastupnij etap pobudovu shlyahu V inshomu vipadku lichilnik krokiv zbilshuyetsya na odinicyu i opisanij dlya pochatkovoyi tochki algoritm povtoryuyetsya dlya vsih tochok z vagoyu K 1 Yaksho kinceva tochka ne znajdena i dlya vsih tochok z vagoyu K 1 v okoli ne lishilos vilnih komirok to vvazhayetsya sho shlyah ne isnuye Na etapi pobudovi shlyahu zgortannya hvili pochinayemo ruh z kincevoyi tochki Dlya ciyeyi tochki obirayetsya komirka z yiyi okolu vaga ciyeyi komirki bude K Todi dlya ciyeyi komirki znovu shukayetsya sumizhna z vagoyu K 1 Takim chinom prodovzhuyetsya doti poki ne znajdeno komirku z vagoyu 1 v okoli yakoyi znahoditsya pochatkova tochka vaga pochatkovoyi tochki 0 Takim chinom mayemo pobudovanij shlyah yakij takozh vidnosit do mnozhini shlyahiv minimalnoyi dovzhini Priklad realizaciyi red Takozh odniyeyu z zadach z yakimi legko spravlyayetsya hvilovij algoritm ye poshuk vihodu z labirintu Nizhche navedeno priklad realizaciyi algoritmu poshuku vihodu z labirintu na movi S dzherelo include conio h Dlya funkciyi getch include lt string h gt struct screen point unsigned char chr unsigned char attr Ce vse sho potribno dlya vivodu na ekran typedef struct screen point screen line 80 screen line scr char movecost 10 10 0 0 0 0 0 0 0 0 0 0 0 1 6 6 6 6 6 1 1 0 0 1 0 0 0 0 6 0 0 0 0 1 0 1 1 1 1 1 1 0 0 1 0 1 1 0 0 0 1 0 Ce i ye labirint 0 1 0 1 0 0 1 0 1 0 0 stina 0 1 0 1 0 1 1 0 1 0 bud yake inshe chislo 0 1 0 0 0 0 0 0 1 0 stupin prohidnosti 0 1 8 1 1 1 1 1 1 0 1 najkrasha prohidnist 0 0 0 0 0 0 0 0 0 0 unsigned char fillmap 10 10 Rozmir rivnij rozmiru labirintu yaksho shlyah mozhe buti dovshim za 255 varto zaminiti byte gt word struct signed char x y Koordinati v labirinti buf 256 Chim bilshij labirint tim bilshim povinen buti cej masiv unsigned char bufp bufe Indeksi v buf int sx sy tx ty Pochatkovi ta kincevi koordinati shlyahu Cya chastina zajmayetsya vivodom na ekran i ne maye zhodnogo vidnoshennya do algoritmu void clrscr Ochistiti ekran int i for i 0 i lt 80 25 i short scr i 0x0720 Nadrukuvati ryadok str v koordinatah x y kolorom attr void writestr int x int y char str char attr int i for i 0 str i 0 i x scr y x chr str i scr y x attr attr Malyuyemo pochatkovij malyunok labirintu void draw maze int i j for j 0 j lt 10 j for i 0 i lt 10 i scr j i 2 attr 16 7 movecost j i 7 8 i j amp 1 scr j i 2 1 attr 16 7 movecost j i 7 8 i j amp 1 scr sy sx 2 chr scr sy sx 2 1 chr scr ty tx 2 chr lt scr ty tx 2 1 chr gt scr 1 40 attr 16 7 1 writestr 45 1 Puste misce 7 scr 3 40 attr 16 7 0 writestr 45 3 Stina 7 scr 5 40 attr 16 7 6 writestr 45 5 Boloto 7 writestr 40 7 Pochatkova tochka 7 writestr 40 9 lt gt Cil shlyahu 7 Realizaciya samogo algoritmu Cya funkciya pereviryaye chi ye zaproponovanij shlyah v tochku finishu bilsh korotkim nizh znajdeni ranishe i yaksho tak to zapam yatovuye tochku v buf void push int x int y int n if fillmap y x lt n return Yaksho novij shlyah ne korotshij jogo vidkidayemo fillmap y x n Zapam yatovuyemo novu dovzhinu shlyahu buf bufe x x buf bufe y y Zapam yatovuyemo tochku bufe scr y x 2 chr n 10 48 Promalovka ta ochikuvannya natisnennya klavishi scr y x 2 1 chr n 10 48 getch Tut beretsya chergova tochka z buf i povertayetsya 1 yaksho buf pustij povertayetsya 0 int pop int x int y if bufp bufe return 0 x buf bufp x y buf bufp y bufp return 1 void fill int sx int sy int tx int ty int x y n t Spochatku fillmap zapovnyuyetsya max znachennyam fmemset fillmap 0xFF sizeof fillmap bufp bufe 0 Obnulyayemo buferi push sx sy 0 while pop amp x amp y Cikl vikonuyetsya doki ye tochki v buferi if x tx amp amp y ty writestr 0 20 Znajdeno shlyah dovzhinoyu 15 scr 20 19 chr n 10 48 scr 20 20 chr n 10 48 break n rivne dovzhini shlyahu do bud yakoyi susidnoyi komirki n fillmap y x movecost y x Perebir 4 h susidnih komirok if movecost y 1 x push x y 1 n if movecost y 1 x push x y 1 n if movecost y x 1 push x 1 y n if movecost y x 1 push x 1 y n Yaksho perebrano vsyu kartu i ne znajdeno zhodnogo shlyahu if fillmap ty tx 0xFF writestr 0 20 Shlyahu ne isnuye 15 return else writestr 0 20 Zalivku zaversheno Projdemo po shlyahu 15 x tx y ty n 0xFF Mi pochali zalivku z sx sy otzhe po shlyahu dovedetsya jti z tx ty u zvorotnomu napryami while x sx y sy Doki ne prijshli v sx sy scr y x 2 attr 2 16 scr y x 2 1 attr 2 16 Malyuvannya Shukayetsya susidnya komirka if fillmap y 1 x lt n tx x ty y 1 t fillmap y 1 x sho mistit if fillmap y 1 x lt n tx x ty y 1 t fillmap y 1 x minimalne znachennya if fillmap y x 1 lt n tx x 1 ty y t fillmap y x 1 if fillmap y x 1 lt n tx x 1 ty y t fillmap y x 1 x tx y ty n t Perehodimo na znajdenu komirku getch Ochikuyemo natisnennya klavishi void main int i sx 1 sy 1 Zadannya pochatkovoyi tochki tx 3 ty 3 Zadannya cili shlyahu scr screen line 0xB8000 clrscr draw maze getch fill sx sy tx ty Viklik funkciyi poshuku shlyahu Div takozh red Algoritm kanalnogo trasuvannyaLiteratura red Wai Kai Chen The circuits and filters handbook 2 2003 2961 s ISBN 0849309123 Frank Rubin The Lee path connection algorithm IEEE Transactions on Computers 1974 Posilannya red Dovedennya korektnosti algoritmu Arhivovano 7 grudnya 2010 u Wayback Machine ros Otrimano z https uk wikipedia org w index php title Hvilovij algoritm amp oldid 35131288