您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~
题目:假设我们有一个大小为NxN的矩阵,矩阵每一个位置是一个方块。每个位置可以是1(可通行)或0(阻挡的),maze[0][0]为起点,maze[n][n]为终点,判断是否可以从起点顺路通往终点。
const maze = [
[1,0,0,0],
[1,1,1,1],
[0,0,0,1],
[0,1,0,1]
]
var flag = false;
function test(maze, nowX, nowY) {
if(maze[0][0] == 0) return false; //如果起点不通,false
let nowWay; //正在走哪条路
if(nowX == maze.length - 1 && nowY == maze[0].length - 1 && maze[nowX][nowY] == 1) {
//如果到终点,并且终点为1
flag = true;
return flag;
} else {
if(nowX == maze.length - 1 && maze[nowX][nowY + 1] == 0 ) {
//如果到了最下排,并且往右走不通
if(!nowWay) {
//如果已经被清空标记点,无路可换
return false;
}
nowWay = ''; //清空移动方向,回退,重新选择路,并把此点标为0
maze[nowX][nowY] = 0;
test(maze, nowX - 1, nowY)
}
if(nowX !== maze.length - 1 && maze[nowX + 1][nowY] == 1 ) {
//如果到了最右排,并且下面可以走
nowWay = 'x';
test(maze, nowX + 1, nowY)
}
if(nowY !== maze[0].length - 1 && maze[nowX][nowY + 1] == 1 ) {
//如果到了最下排,并且右面可以走
nowWay = 'y';
test(maze, nowX, nowY + 1)
}
}
return flag;
}
console.log('迷宫为:', maze)
console.log(test(maze, 0, 0))
可通行:
不可通行:
如果有更好的解题思路,欢迎留言。