题解 | #走迷宫#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)
}()

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务