La définition de la "distance" dans ce type de problèmes est toujours délicate.
Imaginez que les points sont des marques sur un terrain, et que vous pouvez vous promener librement dessus. Vous pourriez alors emprunter n'importe quel chemin d'un point à l'autre. Le chemin le plus court serait alors une ligne droite ; sa longueur serait celle du vecteur qui relie les points, qui se trouve être le vecteur de différence entre les positions de deux points. Cette longueur peut être calculée à l'aide du théorème de Pythagore : dist = sqrt((x2-x1)^2 + (y2-y1)^2)
. On appelle cela la distance euclidienne entre les points.
Imaginez maintenant que vous êtes dans une ville, et que chaque point est un bâtiment. Vous ne pouvez pas marcher sur un bâtiment, donc les seules options sont d'aller soit vers le haut/bas, soit vers la gauche/droite. Dans ce cas, la distance la plus courte est donnée par la somme des composantes du vecteur de différence, ce qui est la façon mathématique de dire que "descendre de 2 pâtés de maisons puis aller à gauche d'un pâté de maisons" signifie marcher sur une distance de 3 pâtés de maisons : dist = abs(x2-x1) + abs(y2-y1)
. C'est ce qu'on appelle la distance de Manhattan entre les points.
Dans votre problème, cependant, il semble que le seul mouvement possible soit de sauter à un point adjacent, en une seule étape, diagonales autorisées. Le problème devient alors un peu plus délicat, car le chemin est très irrégulier. Vous avez besoin d'un peu de théorie des graphes ici, très utile pour modéliser des problèmes avec des éléments liés, ou "nœuds". Chaque point serait un nœud, connecté à ses voisins, et le problème serait de trouver le chemin le plus court vers un autre point donné. Si les sauts ont des poids différents (par exemple, si les sauts en diagonale sont plus difficiles), un moyen facile de résoudre ce problème serait l'algorithme de Dijkstra ; plus de détails sur la mise en œuvre à l'adresse suivante Wikipedia .
Si le coût est toujours le même, alors le problème se réduit à compter le nombre de sauts dans une recherche en largeur (Breadth-First Search) du point de destination depuis la source.