Random Walk

Random Walk pathfinding algorithm — interactive grid visualization, pseudocode in five languages, and complexity reference.

Time O(steps) Unweighted Probabilistic

Implementation

function randomwalkPathfind(grid, start, end, allowDiag) {
  const prev = new Map();
  let r = start[0];
  let c = start[1];
  for (let step = 0; step < grid.length * grid[0].length * 2; step++) {
    visitNode(r, c);
    if (r === end[0] && c === end[1]) {
      reconstructPath(prev, start, end);
      return;
    }
    const neighbors = getNeighbors(grid, r, c, allowDiag);
    if (!neighbors.length) break;
    const __pattern1 = neighbors[Math.floor(Math.random() * neighbors.length)];
    const nr = __pattern1[0];
    const nc = __pattern1[1];
    const nk = key(nr, nc);
    if (!prev.has(nk) && !(nr === start[0] && nc === start[1])) prev.set(nk, [r, c]);
    r = nr;
    c = nc;
    pushFrontier(r, c);
  }
  reportNoPath();
}