Pathfinding peut être facilement obtenue en utilisant l'algorithme de floodfill, qui peut être écrit sous une forme récursive
function floodFill(x, y, prevPoints)
{
var prevPoints = prevPoints.concat([]); //make a copy of the points list since JS uses ref
if(grid[x][y].isExit) return prevPoints;
grid[x][y].accessed = true;
prevPoints.push([x, y]);
var result;
var cfr; //cellfillresult
if(grid[x+1][y].isPath && !grid[x+1][y].accessed) cfr = floodFill(x+1, y, prevPoints);
if(cfr != null) result = cfr;
if(grid[x-1][y].isPath && !grid[x-1][y].accessed) cfr = floodFill(x-1, y, prevPoints);
if(cfr != null) result = cfr;
if(grid[x][y+1].isPath && !grid[x][y+1].accessed) cfr = floodFill(x, y+1, prevPoints);
if(cfr != null) result = cfr;
if(grid[x][y-1].isPath && !grid[x][y-1].accessed) cfr = floodFill(x, y-1, prevPoints);
if(cfr != null) result = cfr;
return result;
}
var pathToExit = floodFill(entranceX, entranceY, []);
Cependant, cela est très inefficace et provoquera un débordement de pile une fois que vous arrivez à plus-ish grilles ... Une meilleure façon de le faire serait de faire une pile logicielle ...
En outre, il trouve seulement un chemin qui fonctionne, mais pas le chemin le plus efficace. Vous devrez ajouter le compte à l'algorithme [qui ne devrait pas prendre trop d'effort, je l'espère]
Désolé, les valeurs dans le tableau représentent la distance entre deux points? Un emplacement unique dans un tableau 2D ne spécifie qu'un seul point, n'est-ce pas? – tloflin
Imaginez les en-têtes de lignes et de colonnes (ABCD) de sorte que le point trois à l'autre et l'autre à la verticale soient la distance entre C et A. – rikkit