Questoèunesempiodiciòchevogliofaretramitecodice.Sochepuoiusarelaricercadelpuntodisaltoperottenerefacilmentedalnodoverdealnodorossosenzaproblemi,oaddiritturaA*.Macomesicalcolaquestocongliorditi.
Nell'immagine,puoivederechecivoglionosolo8mosseperpassaredalnodoverdealnodorossoquandosiprendeilsentieroblu.Ilpercorsobluspostaistantaneamentelatuaposizionedaunnodoviolaaquellosuccessivo.Lospazionelmezzochecosta2mosseèunpuntotraduezonediorditochedevispostareperraggiungere.
Èchiaramentepiùveloceprendereilsentieroblu,dalmomentochedevisolospostartiametà(approssimativamente)finoalpercorsogiallo,macomefaccioafarloinmodoprogrammatico?
Alloscopodirisolverequestoproblema,supponiamochecisianopiù"deformazioni" viola attorno al grafico che sei in grado di utilizzare, E sappiamo esattamente dove ogni punto viola si deformerà e dove sono sul grafico .
Alcuni orditi viola sono bidirezionali, altri no, il che significa che a volte puoi solo inserire un curvatura da un lato, ma non tornare indietro dopo la deformazione.
Ho pensato alla soluzione e ho concluso che sarei stato in grado di calcolare il problema controllando la distanza da ciascun punto di curvatura (meno i punti unidirezionali) e la differenza tra quei punti e i punti vicino a loro.
Il programma dovrebbe capire in qualche modo che è più vantaggioso prendere la seconda distorsione, invece di camminare dal primo salto. Quindi, invece di spostare 6 punti, poi deformare, quindi spostare i restanti 8 passi a piedi (che è anche più veloce di non usare affatto gli orditi), occorrerebbero le 6 mosse, quindi i due si spostano al secondo curvatura.
EDIT: ho realizzato che il percorso blu richiede effettivamente 12 movimenti, anziché 8, ma la domanda rimane la stessa.