题解 | #迷宫问题#回溯(注意去重)
迷宫问题
https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc
while (str = readline()) {
const [m, n] = str.split(' ').map(Number);
const nums = [];
for (let i = 0; i < m;i++) {
nums.push(readline().split(' '))
}
const path = [];
function backtrack (i, j) {
if (i === m - 1 && j === n - 1) {
path.push(`${i},${j}`);
path.forEach((v) => {
console.log(`(${v})`);
});
return;
}
if (path.includes(`${i},${j}`)) {
// 去重
return;
}
path.push(`${i},${j}`);
if (i >= 1 && nums[i - 1][j] === '0') {
backtrack(i - 1, j);
}
if (j >= 1 && nums[i][j - 1] === '0') {
backtrack(i, j - 1);
}
if (j < n - 1 && nums[i][j + 1] === '0') {
backtrack(i, j + 1);
}
if (i < m - 1 && nums[i + 1][j] === '0') {
backtrack(i + 1, j);
}
path.pop();
}
backtrack(0, 0);
}
