【问题标题】:Find number of zeros surrounded by ones if you know positions of ones如果您知道一的位置,则查找被一包围的零的数量
【发布时间】:2018-09-09 12:17:55
【问题描述】:

我正在处理一项编程挑战,我必须找到被一包围的零的数量。

我已经给了:
行数和列数rc
n
n 的位置数 i j 其中i 是行索引,j 是列索引

例如,如果我有

011110 010001 010001 001110 000000

然后我返回6
有3个测试输入集。在前两组r, c <= 1000。我设法通过使用 DFS 通过前两组来计算未被一包围的零的数量(从边界开始)。因此,z = r * c - k - n 的零数量k 是未被 1 包围的零数量。

但在第三种情况下,r, c <= 10^18 如果我在开始时创建二维向量,它甚至不适合记忆。我还注意到n 在所有集合中都相对较小(n <= 10^6)。

我的问题是如何为所有测试集解决这个问题?

【问题讨论】:

  • "我的问题是如何为所有测试集解决这个问题?" 很简单:通过编写代码来做到这一点。 SO 不是代码编写服务。
  • @AlgirdasPreidžius 我不需要这个问题的代码。我只是要求一种算法,因为我无法设计出这种算法。
  • 1) 这样的问题对于 SO 来说也太宽泛了。一旦有了算法,它通常可以直接翻译成代码。因此,这实际上是相同的请求。 2)考虑重新使用tour,并阅读How to Askhelp center
  • 一个提示:如果你有例如10^18 行和 10^6 行,那么必须有很多行,其中只有零。无需将它们存储在数组中。
  • 行中第一个索引和最后一个索引之间的所有非一索引都有被一包围的零。

标签: c++ algorithm


【解决方案1】:

Counting Rooms While Knowing Where Walls Are 在这里您可以找到计算被墙壁包围的房间的结果(在您的情况下为“1”),您必须更改代码,它计算“0”的数量。但想法是一样的。通过 bfs 或 dfs 制作。

【讨论】:

  • 此代码用于计算被墙壁包围的空间。如果您将墙壁定义为 1,并更改它计数为零的 dfs,您就达到了目标
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2018-09-19
  • 2013-01-29
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多