1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
function resolve(matrix) { const dx = [1, 0, -1, 0] const dy = [0, 1, 0, -1] let startX = 0 let startY = 0 let endX = 0 let endY = 0 const iLen = matrix.length const jLen = matrix[0].length const queue = [] const dp = new Array(iLen) .fill(null) .map(() => new Array(jLen).fill(undefined))
for (let i = 0; i < iLen; i++) { for (let j = 0; j < jLen; j++) { if (matrix[i][j] === "S") { startX = i startY = j }
if (matrix[i][j] === "G") { endX = i endY = j } } }
queue.push([startX, startY]) dp[startX][startY] = 0
while (queue.length > 0) { const [x, y] = queue.shift()
if (x === endX && y === endY) { break }
for (let i = 0; i < 4; i++) { const tempX = x + dx[i] const tempY = y + dy[i]
if ( tempX >= 0 && tempX < iLen && tempY >= 0 && tempY < jLen && matrix[tempX][tempY] !== "#" && dp[tempX][tempY] === undefined ) { queue.push([tempX, tempY]) dp[tempX][tempY] = dp[x][y] + 1 } } }
return dp[endX][endY] }
console.log( resolve([ "#S######.#", "......#..#", ".#.##.##.#", ".#........", "##.##.####", "....#....#", ".#######.#", "....#.....", ".####.###.", "....#...G#", ]) )
|