题解 | #迷宫问题#

迷宫问题

http://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

15行代码过80%+,还有一点小瑕疵等我下次再找

let n=readline().split(' ').map(Number),maze=[]//读数据
while(line=readline()) maze.push(line.split(' ').map(Number))
function find(i,j,road){
    road.push([i,j]);//先推入0,0
    maze[i][j]=1;
    if(i==n[0]-1 && j==n[1]-1){
        for (let i of road) print(`(${i[0]},${i[1]})`);
    }
    if(j+1<n[1] && maze[i][j+1]==0) find(i,j+1,road)//右
    if(i+1<n[0] && maze[i+1][j]==0) find(i+1,j,road)//下
    if(j-1 >= 0 && maze[i][j-1]==0) find(i,j-1,road)//左
    if(i-1 >= 0 && maze[i-1][j]==0) find(i-1,j,road)//上
}
find(0,0,[])

递归调用,每次判断上下左右四方向;

走过路径标记为1,直到最终到达终点

借鉴隔壁python解法:题解 | #迷宫问题#

全部评论
加上回溯,就可以100%通过测试用例了, let n = readline().split(" ").map(Number), maze = []; //读数据 while ((line = readline())) maze.push(line.split(" ").map(Number)); let v = [...Array(n[0])].map(() => Array(n[1]).fill(0)); function find(i, j, road) { road.push([i, j]); //先推入0,0 maze[i][j] = 1; if (i == n[0] - 1 && j == n[1] - 1) { for (let i of road) print(`(${i[0]},${i[1]})`); } if (j + 1 < n[1] && maze[i][j + 1] == 0 && v[i][j + 1] == 0) { v[i][j + 1] = 1; find(i, j + 1, road); v[i][j + 1] = 0; road.pop(); } //右 if (i + 1 < n[0] && maze[i + 1][j] == 0 && v[i + 1][j] == 0) { v[i + 1][j] = 1; find(i + 1, j, road); v[i + 1][j] = 0; road.pop(); } //下 if (j - 1 >= 0 && maze[i][j - 1] == 0 && v[i][j - 1] == 0) { v[i][j - 1] = 1; find(i, j - 1, road); v[i][j - 1] = 0; road.pop(); } //左 if (i - 1 >= 0 && maze[i - 1][j] == 0 && v[i - 1][j] == 0) { v[i - 1][j] = 1; find(i - 1, j, road); v[i - 1][j] = 0; road.pop(); } //上 } find(0, 0, []);
2 回复 分享
发布于 2022-08-09 22:00
数组需要深拷贝,第4行改成,let tmp = [...road]; tmp.push([i,j]);
1 回复 分享
发布于 2024-07-04 16:10 宁夏
let n=readline().split(' ').map(Number),maze=[]//读数据 while(line=readline()) maze.push(line.split(' ').map(Number)) function find(i,j,road){ road.push([i,j]);//先推入0,0 maze[i][j]=1; if(i==n[0]-1 && j==n[1]-1){ for (let i of road) print(`(${i[0]},${i[1]})`); } if(j+1<n>= 0 && maze[i][j-1]==0) find(i,j-1,road.slice())//左 if(i-1 >= 0 && maze[i-1][j]==0) find(i-1,j,road.slice())//上 } find(0,0,[])</n>
点赞 回复 分享
发布于 2022-08-01 13:27
递归调用需要把road数组拷贝一个
点赞 回复 分享
发布于 2022-08-01 13:28

相关推荐

徐新高:号已经废了 建议重开一个账号投简历
点赞 评论 收藏
分享
Cassifa:发的字比你都多的一律视为骗子或者想白嫖压榨实习生的
点赞 评论 收藏
分享
评论
4
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务