马走日最短路径-js解法

function  Node(x,y,step) {
    this.x = x;
    this.y = y;
    this.step =step;
}
function inBound(x,y,m,n) {
    return (x<m &&x>=0 && y>=0 && y<n)
}
function findMinStep(x0,y0,x1,y1,m,n) {
    let node  = new Node(x0,y0,0) //当前所在步数
    //x均为负,y可正可负 ,-1,-2
    let dir =[ [-2,-1],[-1,-2],[1,-2],[2,-1],[2,1],[1,2],[-1,2],[-2,1]] //可走的方向
    //记录已经访问过的坐标数组
    let obj ={};
    obj[x0.toString()+y0.toString()] = true;
    let res = [];
    res.push(node)
    //广度优先遍历
    while (res.length){
        //从8个方向依次遍历每一种走法
        let cur  = res.shift();//取出当前的
        if((cur.x == x1) && (cur.y ==y1)){
            return cur.step
        }
        for(let i=0;i<8;i++){
            let x = cur.x+dir[i][0],
                y = cur.y+dir[i][1];
                let temp = obj[x.toString()+y.toString()];
            if(inBound(x,y,m,n) && !temp){
                obj[x.toString()+y.toString()] = true;
                res.push(new Node(x,y,cur.step+1))
            }
        }

    }
    return -1
}
// console.log(findMinStep(0,0,7,7,8,8)) //6
// console.log(findMinStep(0,0,0,0,8,8)) //0
// console.log(findMinStep(0,0,1,1,2,2)) //-1
// console.log(findMinStep(0,0,1,1,3,3)) //-1
// console.log(findMinStep(0,1,2,1,3,3))//4
// console.log(findMinStep(0,0,19,29,20,30))//16
// console.log(findMinStep(0,0,299,299,300,300))//200
console.log(findMinStep(0,0,8999,9999,9000,10000))// 未运行出结果.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值