【发布时间】: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