【问题标题】:Checking the neighbours of a cell value from a matrix [closed]从矩阵中检查单元格值的邻居[关闭]
【发布时间】:2017-06-16 16:53:53
【问题描述】:

我有一个用* and - 填充的矩阵,其中* 表示病毒,- 是病毒的空闲点,我必须在矩阵中检查每个病毒的邻居,有效的邻居是另一种病毒而不是一个免费的地方,以建立他们的号码。我要检查的邻居是[row + 1][col][row - 1][col][row][col + 1][row][col - 1],总共四个邻居。我创建了一个函数来检查并涵盖所有情况,例如,如果我正在检查的元素是矩阵的角之一。我想出了一个非常长的 80 行函数,其中包含很多 if 语句。 除了必须编写 20 个 if 语句之外,是否有一种有效的方法(即行数)来检查所有这些?

https://pastebin.com/2f7YpreZ这是我写的代码

【问题讨论】:

  • 您有一个功能可以完成这项工作但似乎效率低下?在适当的站点尝试代码审查。 codereview.stackexchange.com
  • 如果您希望有人在这里发现您现有代码中最无用的设计问题,请发送minimal reproducible example
  • Is there an efficient way to check all this besides having to write like 20 if statements? 好吧 - 请定义 efficient。在性能方面?就代码行数而言?在可维护性方面?如果您指的是性能,请相信编译器。如果您的要求没有得到满足,请分析您的代码并进行相应调整。
  • @MariusJula - 发布您的代码,以便我们看到您目前拥有的内容
  • 我会先做 4 个角,然后是 4 个边缘(除了角),然后是其余的(除了边缘)。不需要测试任何异常。

标签: c performance matrix neighbours coding-efficiency


【解决方案1】:

您可以做的是合并导致相同结果的 if 语句。这将导致代码更短(更易读),并且在某些情况下可以提高性能。

例如,如果您有:

if([row - 1][col])
    // do A
else if([row][col + 1])
    // do B
else if([row + 1][col])
    // do A

那么你可以这样写:

if([row - 1][col] || [row + 1][col])
    // do A
else if([row][col + 1])
    // do B

这样做,如果您觉得您的代码需要进一步改进,请在Code Review 发帖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多