最近 地铁 上玩这个
然后想了想 路径 算法
只会穷举~
function findWay(m, n,/*空点 不能走*/emptyArrs,/*起点*/start) {
let totalPoint = m * n;
let inTotalPoint = 1;
console.time('a44')
function init() {
let mn = [];
for (var i = 0; i < n; i++) {
mn[i] = []
for (var j = 0; j < m; j++) {
mn[i][j] = 1
}
}
emptyArrs.forEach(item => {
mn[item[0]][item[1]] = 2;
totalPoint--;
})
return mn;
}
//
let mn = init();
let ways = {
[start[0] + '-' + start[1]]: 0
};
findNextStep([start[0] + 1, start[1]], ways, 1)
findNextStep([start[0] - 1, start[1]], ways, 1)
findNextStep([start[0], start[1] + 1], ways, 1)
findNextStep([start[0], start[1] - 1], ways, 1)
function findNextStep(p, ways, i) {
if (ways[p[0] + '-' + p[1]] > 1) {
return false;
}
if (p[0] == start[0] && p[1] == start[1]) {
return false;
}
if (p[0] < 0 || p[1] < 0 || p[0] >= n || p[1] >= m) {
return false;
}
ways[p[0] + '-' + p[1]] = i;
// console.log(p)
// 上下左右
if (getPoint([p[0], p[1] - 1]) == 1) {
if (!findNextStep([p[0], p[1] - 1], ways, i + 1)) {
ways[p[0] + '-' + (p[1] - 1)] = -1;
}
}
if (getPoint([p[0], p[1] + 1]) == 1) {
if (!findNextStep([p[0], p[1] + 1], ways, i + 1)) {
ways[p[0] + '-' + (p[1] + 1)] = -1;
}
}
if (getPoint([p[0] - 1, p[1]]) == 1) {
if (!findNextStep([p[0] - 1, p[1]], ways, i + 1)) {
ways[(p[0] - 1) + '-' + p[1]] = -1;
}
}
if (getPoint([p[0] + 1, p[1]]) == 1) {
if (!findNextStep([p[0] + 1, p[1]], ways, i + 1)) {
ways[(p[0] + 1) + '-' + p[1]] = -1;
}
}
if (Object.values(ways).filter(item => item > 0).length == totalPoint) {
console.timeEnd('a44');
console.log(ways);
return true;
}
return false;
}
function getPoint(p) {
if (ways[p[0] + '-' + p[1]] >= 0) {
return 3;
}
return (p && mn[p[0]] && mn[p[0]][p[1]]) || 2;
}
}
findWay(8,6,[[4,0],[1,1],[2,1],[0,4],[5,4]],[4,7])