【问题标题】:Algorithm (JS -React)算法(JS -React)
【发布时间】:2022-01-22 09:48:48
【问题描述】:

我目前面临一个我无法解决的算法问题,我真的需要帮助。

总体布局如下:

  • 项目放置在 4x4 网格内(从位置 0,0 到 3,3)。
  • 项目有 3 种不同的状态,“unlocked”、“unlockable”和“locked”。
  • 网格以单元格 (0,0) 作为“unlockable”启动。
  • 当单元格被解锁(或点击)时,相邻的(水平和垂直非对角线)单元格变为“unlockable”。
  • 单元格应连接到起点(单元格 (0,0))。
  • 可以取消分配单元格(再次“锁定”)。
  • 如果一个未分配的(“locked”)单元格相邻有“unlocked”单元格,它将变为“unlockable”而不是“解锁”。

这就是我面临的问题:

假设我已解锁单元格 (0,0)、(1,0)、(2,0)、(2,1)。

在这种情况下,锁定单元格 (2,0) 应该是不可能的,因为单元格 (2,1) 将失去与 (0,0) 的任何连接。

我怎样才能实现这样的逻辑,以使单元格不能被锁定,除非这样做是安全的(下一个单元格仍然以某种方式连接到起点)?

如果这需要一些通用算法类型,我不知道如何搜索它,所以请随时提供它的名称以便我学习它。我没有学习计算机科学,我是自学教过的学生。

【问题讨论】:

  • 什么算作相邻单元格?横向?垂直?对角线?以上都是?
  • 在我看来,您的网格足够小,您应该能够简单地获取网格的副本,并将相关单元格更改为锁定(并且其邻居已适当更新),然后查看是否有任何未连接到(0, 0) 的未锁定单元岛。如果没有,那么您可以更改原始单元格。应该很容易找到一种算法来找到网格上的连通岛。
  • 好像我没有解释清楚对不起,只有水平和垂直相邻的单元格,而不是对角线。

标签: javascript reactjs algorithm logic


【解决方案1】:

执行此操作的标准方法是将您的网格视为graph(一组顶点和边)并将其视为图形问题。单元格将是图形的顶点,由它们之间的水平和垂直边缘连接。您将跟踪哪些单元格/顶点未锁定,与未锁定单元格相邻的单元格将可解锁,而所有其他单元格将被锁定。

图中的“切割顶点”或“连接点”是一个顶点,如果将其移除,则会断开该图的连接。您希望在允许锁定单元之前确保单元不是未锁定单元中的切割顶点(因为这样做会断开未锁定单元的某些部分)。您可以对未锁定的单元格执行Depth-First-Search 以找到它们的关节点,并在锁定之前检查要锁定的单元格是否是这些点之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2019-04-22
    • 1970-01-01
    • 2018-02-18
    • 2019-03-20
    • 1970-01-01
    相关资源
    最近更新 更多