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))// 未运行出结果.
马走日最短路径-js解法
最新推荐文章于 2024-03-17 19:41:51 发布