c++ - 在矩阵中查找邻居位置

标签 c++ matrix

我一直很无聊,所以我创建了一个小型控制台扫雷游戏,在编写它时,我必须在 size*size 矩阵中找到一个元素的相邻位置,该矩阵表示为一个元素 vector 和一个变量,它保存尺寸值。我不想返回相邻元素的实际值,而是返回它们的位置,以便我可以将其用作公共(public)函数(否则客户可以看到地雷所在的位置 :P)。

例如,对于字段 eq 0 和大小 eq 3,该函数应返回 {1, 3, 4}:

1 0 0    0 1 0
0 0 0 => 1 1 0
0 0 0    0 0 0

嗯,基本上它看起来像这样:

vector<int> adjecantPositions(int field, int size)
{   
    int row = field / size;
    int col = field % size;
    vector<int> result;

    /*
        1 0 0
        1 0 0
        1 0 0
    */    
    if (col > 0)
    {
        result.push_back(calcField(row, col-1, size));

        if (row > 0)    
            result.push_back(calcField(row-1, col-1, size));
        if (row < size - 1)
            result.push_back(calcField(row+1, col-1, size));
    }

    /* 
       0 0 1
       0 0 1
       0 0 1
    */
    if (col < size - 1)
    {
        result.push_back(calcField(row, col+1, size));

        if (row > 0)    
            result.push_back(calcField(row-1, col+1, size));
        if (row < size - 1)
            result.push_back(calcField(row+1, col+1, size));

    }

    /*
        0 1 0
        0 0 0
        0 1 0
    */
    if (row > 0)
        result.push_back(calcField(row-1, col, size));
    if (row < size - 1)
        result.push_back(calcField(row+1, col, size));

    return result;
}

calcField(int, int, int) 只是将坐标转换为字段编号 (row*size + col)。

这是一个快速的解决方案,但它并不优雅,我敢打赌有一些更好的方法可以做到这一点。有什么想法吗?

最佳答案

是的,你的代码很糟糕。这是一个更好的尝试(已修复,抱歉):

for (int dx=-1; dx<=1; dx++)
  for (int dy=-1; dy<=1; dy++) 
    if (dx || dy){
      int x = row+dx, y=col+dy;
      if (x >= 0 && x < size && y >= 0 && y < size)
         result.push_back(calcField(x, y, size));
    }

关于c++ - 在矩阵中查找邻居位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1679768/

相关文章:

performance - 在每个给定区域找到最小值的有效方法

c++ - 在 C++ 中将类型的容器作为字段是个坏主意吗?

c++ - "I just can not understand DR 712"的延续

c++ - 指向特征矩阵的指针数组

matlab - 在每行列之间插入零的行和列

c++ - 用 block 稀疏矩阵求解大型线性系统

具有值类型 std::map 的 C++ std::map

java - 将百万条记录从 MEMORY 表移动到 MYISAM 表

c++ - QT HTTP 获取请求 SSL 错误

python - 删除pytorch中的零维