Comment calculer le plus court chemin entre deux points dans une grille

Je sais que de nombreux algorithmes sont disponibles pour calculer le plus court chemin entre deux points dans un graphique ou d'une grille, comme en largeur d'abord, toutes les paires (Floyd), Dijkstra est.

Cependant, comme je l'ai remarqué, tous ces algorithmes de calcul de tous les chemins dans ce graphe ou de la grille, et pas seulement ceux entre les deux points nous intéressent.

MA QUESTION EST:
si j'ai une grille, c'est à dire un tableau à deux dimensions, et je suis intéressé dans le calcul du plus court chemin entre deux points, par exemple P1 et P2, et si il y a des restrictions sur la façon dont je peux me déplacer sur la grille (par exemple, seulement en diagonale, ou seulement en diagonale et vers le haut, etc.),
quel algorithme permet de calculer cela?

Veuillez remarquer que si vous avez une réponse, je voudrais vous poster le nom de l'algorithme plutôt que l'algorithme lui-même (bien sûr, encore mieux si vous aussi poster l'algorithme); par exemple, si c'est l'algorithme de Dijkstra, ou Floyd, ou quoi que ce soit.

S'il vous plaît aidez-moi, j'ai été de penser à ce sujet pendant des mois!


okey les gars j'ai trouvé cet algorithme sur TOPCODER.COM
ici, dans la grille, vous pouvez déplacer uniquement (en diagonale et vers le haut)
mais je ne peux pas comprendre ce que l'algorithme est-ce par quelque moyen que pouvait-on le savoir?

#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);
}
};
  • Voulez-vous la longueur du chemin le plus court ou le chemin d'accès réel? Est la grille la garantie d'être dégagée de l'uniforme et de "coût" pour traverser?
  • je veux que la longueur du chemin le plus court, la grille est complètement uniforme , penser que c'est un plan cartésien dont les coordiantes sont des entiers
  • Dijkstra ne veut pas nécessairement calculer les plus courts chemins à tous les autres points sur le graphique. Il doit calculer les plus courts chemins pour tout point à ce qui a un chemin plus court que votre objectif (et il peut aussi trouver le chemin d'accès à des points qui ont la même longueur du plus court chemin que votre but). Alors il peut aller d'un point au-delà de ces points, mais cela devrait être tout.
InformationsquelleAutor Alan_AI | 2010-02-22