题解 | #走迷宫#BFS
走迷宫
https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;
void async function () {
// Write your code here
let cnt = 0
let n,m
let startX,startY,endX,endY
let lines = []
while(line = await readline()){
lines.push(line)
}
let lines_0 = lines[0].split(' ')
n = +lines_0[0]
m = +lines_0[1]
let lines_1 = lines[1].split(' ')
startX = +lines_1[0] - 1
startY = +lines_1[1] - 1
endX = +lines_1[2] - 1
endY = +lines_1[3] - 1
let flag = false //是否找到目标
let arr = new Array(n)
for(let i = 0;i < n;i ++) {
arr[i] = lines[i+2].split('')
}
let used = new Array(n).fill(0).map(() => new Array(m).fill(0))
//console.log(used,'used')
function bfs() {
let queue = []
let dx = [0,1,0,-1] //右,下,左,上引起的行偏移量
let dy = [1,0,-1,0] //右,下,左,上引起的列偏移量
let cur = {x: startX,y: startY, step: 0} //start
used[startX][startY] = 1
queue.push(cur)
while(queue.length ) {
let now = queue.shift()
//console.log(now,'now')
let x = now.x
let y = now.y
if(x === endX && y === endY) {
console.log(now.step)
flag = true
break
}
for(let i = 0;i <= 3;i ++) {
let tx = x + dx[i]
let ty = y + dy[i]
// 边界判断
if(tx < 0 || tx >= n || ty < 0 || ty >= m)
continue
//console.log(tx,'tx',ty,'ty')
if(arr[tx][ty] === '.' && used[tx][ty] === 0) {
let item = {x: tx,y: ty, step: now.step + 1}
//console.log(item,'item')
queue.push(item)
used[tx][ty] = 1
}
}
}
}
bfs()
if(!flag)
console.log(-1)
}()
阿里云成长空间 702人发布
