为了账号安全,请及时绑定邮箱和手机立即绑定

如何在图中找到元素?

如何在图中找到元素?

大话西游666 2022-06-05 16:11:24
我有以下实体:形式堵塞排细胞场地根元素是Form。里面From是放置的Block。Block包含一些Rows,每个都Row可以包含一些Cell内部具有不同内容的内容:Field或者Block,Block它又是嵌套结构Block -> Rows -> Cells -> Field/Block。它是从根Form到终点的有向有限图Field或Block。只有Block和Field实体具有getId()返回顶点 id 的方法。基于此,我构建了从 root 到具体 vertex 的路径(Blcok, Field)。我试图检查具体的顶点实体(Block)是否按路径呈现在图形中,所以我的解决方案是:从我们开始的地方设置当前顶点(块),设置顶点的收入路径循环获取当前顶点的所有行(块)然后在第一个循环中使用循环从每行中获取所有单元格然后从每个单元格(字段,块)中获取内容检查它是否是 Block 然后获取它id并与传入的路径(id)进行比较如果不相等,则将找到的块设置为当前块(for循环)继续,直到我找不到路径代码是:function getBlockFieldByPath(block: Block, path: string) {   let currentBlock = block;   let irows = 0;   let jcells = 0;   while(irows < currentblock.getRows().length) {       let cells = rows[irows].getCells();       while(jcells < cells.length) {           let content = cells[jcells].getContent(); // it is should be Block or Field,           if (content.getId() == path) {               return content;           }           if (content == Block) {              currentblock = content; // Because content is Block           }          jcells++;       }     irows++;   }   }我的错误在哪里?
查看完整描述

1 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

通过一些抽象,您可以得到一个节点是块的图。


其中一些是微不足道的叶子。


您只想对图表进行 dfs,直到找到与您的路径字符串匹配的块


function dfs(block, path) {

  if (block.getId() === path) return block

  let found = null

  block.getRows().find(r => r.getCells().find(bContent => {

    let b = bContent.getContent()

    found = dfs(b, path)

    return found

  }))

  return found

}


堆栈的变化


function dfs(block, path) {

  const stack = [block]

  while (stack.length) {

    const b = stack.pop()

    if (b.getId() === path) return block

    b.getRows().forEach(r => r.getCells().forEach(bContent => {

      let b = bContent.getContent()

      stack.push(b)

    })

  }

  return null

}


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号