【问题标题】:2D Array consecutive elements algorithm二维数组连续元素算法
【发布时间】:2018-07-28 12:11:51
【问题描述】:

我有一个任务要求我向用户询问 2D 数组的大小,我们需要创建一个具有指定大小的 2D 数组,所以如果用户选择 8 作为大小,我们创建一个 @ 987654323@ 数组,我们随机用'X''O' 填充它。

现在的主要任务是在该二维数组中查找groups 的数量。

4 个或更多连接的“X”(水平OR 垂直NOT 对角线)构成group

例如,下图有3组:

我的问题是是否有(可能有)处理类似问题的算法,所以如果有的话,请务必提供阅读材料。

【问题讨论】:

  • a) 西南角不是还有一组吗? b) 请求算法不是很容易吗?
  • @userunknown 不,没有,'X'-es 组成一个组的要求是有 4 个水平或垂直链接,那里只有 3 个。
  • 啊,一错再错又来了。 :) 好吧,我忽略了岛屿要求的最小尺寸。但是,如果你没有乐趣,独自完成这样的事情,至少提供一个可能不是最佳解决方案的基础——为什么要编程?向我们展示你的努力。
  • @userunknown 我已经解决了这个问题,因为这是我参加的课程中的一个练习所必需的,问题是它太复杂了(循环和条件检查太多),我只是知道有某种算法可以解决这类问题,因此有线程。我有一些算法的基本知识,但是我还没有读过关于这个主题的整本书,尽管我的谷歌驱动器上很少有算法,当我有空闲时间时。

标签: arrays algorithm multidimensional-array pattern-matching


【解决方案1】:

您的任务是在图表中查找connected components 的数量的特例。可以使用breadth-first searchdepth-first search 算法解决。

dfs版本伪代码:

result = 0
for every non-visited cell with 'X' value
    if groupSize(cell.x, cell.y) > 3
        result += 1
return result  

groupSize(x, y)
    size = 0 
    if cell(x, y) is inside array, non-visited and has 'X' value
        mark cell(x, y) as visited  
        size = 1
        size += groupSize(x + 1, y)
        size += groupSize(x - 1, y)
        size += groupSize(x, y + 1)
        size += groupSize(x, y - 1)
    return size  

【讨论】:

  • 只需阅读您的链接,它似乎确实是我所要求的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 2016-01-28
  • 2013-06-12
  • 1970-01-01
  • 2021-01-17
  • 1970-01-01
相关资源
最近更新 更多