java vyhladavanie

Programovacie jazyky, rady, poradňa...
programatorik
Novice
Novice
Príspevky: 7
Registrovaný: 24 mar 2014, 10:27

java vyhladavanie

Príspevok od používateľa programatorik »

Dobrý deň,
chcem pouzivat prehladavanie do sirky v jave, kde mam dvojrozmerne pole a z neho sa moze ist do roznych scenarov cize rozne ine dvojrozmerne polia s inou podobou. Potrebujem kontrolovat, ci uz sa dane pole nevyskytlo vo vyhladavani (aby mi viac krat neprehladavalo ten isty pripad) a vyhladavanie je uspesne pri nejakej podmienke. Zatial nemam skusenosti s breath search first . Bolo mi poradene aby som to robil cez nejake hashovacie tabulky. Potreboval by som nejaky logicky postup ako by som to mal naprogramovat a popripade nejake odkazy odkial sa da dobre pochopit vyhladavanie popripade dalsie veci potrebne k programovaniu tohto problemu.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: java vyhladavanie

Príspevok od používateľa BX »

V prvom rade prestaň o probléme rozmýšľať v súvislosti s 2D polom a začni rozmýšľať v grafoch. No a potom trebárs http://www.algoritmy.net/article/1399/P ... i-do-sirky

Aj keď si nie som istý, či je na tvoj problém vôbec BFS vhodný. Mohol by si ho popísať viac, aký máš vstup a čo sa snažíš dosiahnuť?
programatorik
Novice
Novice
Príspevky: 7
Registrovaný: 24 mar 2014, 10:27

Re: java vyhladavanie

Príspevok od používateľa programatorik »

  • 220008
    300508
    311508
    300500
    400077
    406660
toto je moje dvojrozmerne pole kde sa skupiny cisel posuvaju doprava dolava alebo hore dole podla toho ako su orientovane, nuly znamenaju volny priestor kde sa moze skupina cisel posuvat, tieto skupiny nesmu do seba narazit alebo vyjst z pola. Viem ze BFS na to nieje najefektivnejsi ale potrebujem to riesit pomocou neho.Program by mal skoncit ked jednotky prejdu doprava.
konecny stav:
  • 322000
    300000
    300011
    400508
    477508
    666508
Prehladavaju sa vsetky moznosti kde sa moze skupina cisel hybat pre vsetky skupiny cisel.
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: java vyhladavanie

Príspevok od používateľa BX »

No to sa teda potrápiš :) V prvom rade si musíš zadefinovať graf - hlavne teda určiť, čo reprezentujú hrany. V tomto prípade to asi bude pohyb konkrétnej skupiny čísel, ale to si musíš urobiť sám podľa presného zadania. Dúfam, že poznáš teóriu grafov. Potom viz link na BFS, je tam aj implementácia.

No a teraz už aj k pôvodnej otázke: Ak chceš skontrolovať, či už sa ti tento prípad niekedy objavil, tak to bude asi najjednoduchšie nejakou hashovacou funkciou. Ide ti totiž o to, aby si celý jeden stav reprezentoval v jednoduchšom tvare (aby si nemusel porovnávať vždy celé dva 2D polia) a uchovával si množinu už navštívených stavov. Ak sa vykašleš na efektivitu, tak ti toto v podstate ani netreba, stačí ti urobiť vhodnú triedu na reprezentáciu jedného stavu (2D pola) a udržovať si množinu už dosiahnutých stavov.
Jednoduchá hashovacia funkcia by mohla to 2D pole jednoducho prehodiť do stringu po riadkoch. Tým vznikne vždy unikátny string s 36 znakmi a so stringami už sa dá pekne pracovať.
Napísať odpoveď