Recursion 链穿过矩阵
给定一个二进制矩阵,我们要检查两端节点之间是否存在路径,例如: 01 0 0 0 011010 0110 0 0 1 0 这个箱子有一条从第一行到最后一行的链子,在一些行中被拉长。类似地,即使从左到右列有一个链,结果也应该是真的Recursion 链穿过矩阵,recursion,matrix,Recursion,Matrix,给定一个二进制矩阵,我们要检查两端节点之间是否存在路径,例如: 01 0 0 0 011010 0110 0 0 1 0 这个箱子有一条从第一行到最后一行的链子,在一些行中被拉长。类似地,即使从左到右列有一个链,结果也应该是真的 我考虑为每一个积极元素编写一个递归探索函数,从最上面一行到最左边一列。您能提出更好的建议吗?解决方案之一是使用Set: 检查每一行 如果字段值为1,且其一个已访问的邻居位于集合内,则将其坐标(x,y)添加到集合 最后,检查Set是否包含来自最后一行的任何坐标-如果是,则
我考虑为每一个积极元素编写一个递归探索函数,从最上面一行到最左边一列。您能提出更好的建议吗?解决方案之一是使用
Set
:
1
,且其一个已访问的邻居位于集合
内,则将其坐标(x,y)
添加到集合
Set
是否包含来自最后一行的任何坐标-如果是,则存在路径let matrix='01000
01100
00110
00010'.split('\n').map((行)=>{return row.split('')});
设集合=新集合();
设cols=矩阵[0]。长度;
设rows=matrix.length;
for(设col=0;col
解决方案之一是使用设置
:
1
,且其一个已访问的邻居位于集合
内,则将其坐标(x,y)
添加到集合
Set
是否包含来自最后一行的任何坐标-如果是,则存在路径let matrix='01000
01100
00110
00010'.split('\n').map((行)=>{return row.split('')});
设集合=新集合();
设cols=矩阵[0]。长度;
设rows=matrix.length;
for(设col=0;col
let matrix = '01000
01100
00110
00010'.split('\n').map((row) => { return row.split('') });
let set = new Set();
let cols = matrix[0].length;
let rows = matrix.length;
for(let col=0; col < cols; col++){
if(matrix[0][col] == '1'){
set.add(`0,{col}`);
}
}
for(let row=1; row < rows-1; row++){
for(let col=1; col < cols; col++){
if(matrix[row][col] == '1' &&
(set.has(`{row-1},{col-1}`) ||
set.has(`{row-1},{col}`) ||
set.has(`{row-1},{col+1}`) ||
set.has(`{row},{col-1}`))){
set.add(`{row},{col}`);
}
}
}
let row = rows-1;
for(let col=0; col < cols; col++){
if(matrix[row][col] == '1' &&
(set.has(`{row-1},{col-1}`) ||
set.has(`{row-1},{col}`) ||
set.has(`{row-1},{col+1}`) ||
set.has(`{row},{col-1}`))){
// HAS PATH
}
}