So che molti algoritmi sono disponibili per calcolare il percorso più breve tra due punti in un grafico o in una griglia, come larghezza-prima, tutte le coppie (Floyd's), Dijkstra's .Come calcolare il percorso più breve tra due punti in una griglia
Tuttavia, come notato, tutti questi algoritmi calcolare tutti i percorsi in tale grafico o griglia, non solo quelle tra i due punti che ci interessano
mia domanda è:. se ho una griglia, cioè una matrice bidimensionale, e sono interessato a calcolare il percorso più breve tra due punti, ad esempio P1 e P2, e se ci sono restrizioni sul modo in cui posso spostarmi sulla griglia (per esempio solo in diagonale o solo diagonalmente e verso l'alto, ecc.), quale algoritmo è in grado di calcolare questo?
Si noti che se si dispone di una risposta, vorrei che si inserisse il nome dell'algoritmo piuttosto che l'algoritmo stesso (ovviamente, meglio ancora se si pubblica anche l'algoritmo); per esempio, se è l'algoritmo di Dijkstra, o Floyd's, o qualsiasi altra cosa.
Per favore aiutatemi, ci ho pensato per mesi!
ragazzi Okey Ho trovato questo algoritmo su TOPCODER.COM qui nella griglia si può muovere solo (in diagonale in su) ma non riesco a capire che cosa è questo algoritmo con qualsiasi mezzo qualcuno potrebbe sapere?
#include<iostream>
#include <cmath>
using namespace std;
inline int Calc(int x,int y)
{
if(abs(x)>=abs(y)) return abs(x);
int z=(abs(x)+abs(y))/2;
return z+abs(abs(x)-z);
}
class SliverDistance
{
public:
int minSteps(int x1,int y1, int x2, int y2)
{
int ret=0;
if(((x1+y1)&1)!=((x2+y2)&1))y1++,ret++;
return ret+Calc(x2-x1,y2-y1);
}
};
Vuoi la * lunghezza * del percorso più breve o il percorso effettivo? La rete è garantita senza ostacoli e uniforme nel "costo" da percorrere? – NVRAM
Voglio la lunghezza del percorso più breve, la griglia è completamente uniforme, pensala come un piano cartesiano i cui coordianti sono numeri interi –
Dijkstra non calcola necessariamente i percorsi più corti verso tutti gli altri punti del grafico. Ha bisogno di calcolare i percorsi più brevi per ogni punto che ha un percorso più breve del tuo obiettivo (e potrebbe anche trovare il percorso per i punti che hanno la stessa lunghezza del percorso più breve del tuo obiettivo). Allora potrebbe andare un punto oltre questi punti, ma dovrebbe essere tutto. –