Editorial for Sahovska trka


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Rešenje zadatka Šahovska trka.

Glavna ideja je da se napravi graf od 5*h*w čvorova gde svaka pozicija na tabli ima po 5 čvorova (jedan za svaku figuru). Grane u ovom grafu predstavljaju sve poteze koje možemo da napravimo i imaju težinu od 1 do 5. Kako bi izbegli MLE, ove grane ne treba da čuvamo u memoriji nego da prođemo kroz njih iterativno kada posmatramo neki čvor. Jedno od rešenja pušta Dijkstrinalgoritam\( na ovom grafu kako bi se našla udaljenost svih čvorova od črvora koji predstavlja kralja na poziciji \)(1,1)\(. Kako bi ubrzali algoritam, tokom prolaženja kroz sva polja na koja može kraljica/top/lovac da ode u nekom smeru, pored uslova da se prekine pretraga kada se stigne na blokirano polje, treba uvesti uslov da se prekine pretraga ako se stigne na polje koje ima istu ili manju udaljenost od udaljenosti trenutnog polja (ne računajući trenutno polje). Vremenska složenost: \)O(n^3 * log n)\(, Memorijska složenost: \)O(n^2)\(. Još jedna optimizacija programa koja nije bila potrebna za \)100 bodova je da se umesto Dijkstrinogalgoritma pusti Dialovalgoritam\(. Vremenska složenost: \)O(n^3)\(, Memorijska složenost: \)O(n^2)~.


Comments

There are no comments at the moment.