Sto sviluppando un software che collega oggetti con fili. Questo cablaggio ha una regola che questi fili non possono passare su altri oggetti e nessuna mossa diagonale è accettata. Efficiente algoritmo di individuazione dei percorsi che evita gli zigzag
Tutte le più brevi algoritmi di percorso, che io sappia (A *, Dijkstra ecc) trovare questo tipo di percorsi:
Non voglio gli zigzag inutili nel secondo screenshot. Come posso raggiungere questo obiettivo?
Nota: chiunque desideri provare gli algoritmi può utilizzare l'applicazione this.
Un'altra nota: questa è la situazione esatta che non desidero. Trova il percorso a zigzag invece di quello "vai a destra finché non raggiungi la posizione x del bersaglio, vai su fino a raggiungere la posizione y del bersaglio" che ha lo stesso costo con quello a zigzag.
So che A * troverà sempre quei motivi a zigzag a causa dell'euristica che usa, ma un modo per gestire questo è impostare l'euristica per favorire i movimenti orizzontali/verticali su diagonale. Non ho visto il tuo algoritmo per questo, ma non dovrebbe essere difficile da implementare. Questo può funzionare anche per Dijkstra perché entrambi gli algoritmi funzionano quasi allo stesso modo. – smac89
Potrebbe essere possibile evitarlo con L1 (abs [x + y]) invece di L2 (sqrt [x² + y²]) come euristica. Se non puoi procedere in diagonale, è comunque un euristico migliore. Ma questo è solo un hack, e se funziona dipende dall'ordine in cui i nodi vengono estratti dalla coda. –
@larsmans cosa intendi per L1, L2? – Alper