Recursion 链穿过矩阵

Recursion 链穿过矩阵,recursion,matrix,Recursion,Matrix,给定一个二进制矩阵,我们要检查两端节点之间是否存在路径,例如: 01 0 0 0 011010 0110 0 0 1 0 这个箱子有一条从第一行到最后一行的链子,在一些行中被拉长。类似地,即使从左到右列有一个链,结果也应该是真的 我考虑为每一个积极元素编写一个递归探索函数,从最上面一行到最左边一列。您能提出更好的建议吗?解决方案之一是使用Set: 检查每一行 如果字段值为1,且其一个已访问的邻居位于集合内,则将其坐标(x,y)添加到集合 最后,检查Set是否包含来自最后一行的任何坐标-如果是,则

给定一个二进制矩阵,我们要检查两端节点之间是否存在路径,例如:

01 0 0 0

011010

0110

0 0 1 0

这个箱子有一条从第一行到最后一行的链子,在一些行中被拉长。类似地,即使从左到右列有一个链,结果也应该是真的


我考虑为每一个积极元素编写一个递归探索函数,从最上面一行到最左边一列。您能提出更好的建议吗?

解决方案之一是使用
Set

  • 检查每一行
  • 如果字段值为
    1
    ,且其一个已访问的邻居位于
    集合
    内,则将其坐标
    (x,y)
    添加到
    集合
  • 最后,检查
    Set
    是否包含来自最后一行的任何坐标-如果是,则存在路径
  • 由于您没有提到要使用哪种语言,下面是它在Javascript(ES6)中的外观:

    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
    是否包含来自最后一行的任何坐标-如果是,则存在路径
  • 由于您没有提到要使用哪种语言,下面是它在Javascript(ES6)中的外观:

    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
        }
    }