C ++中二进制矩阵中最接近的1

在本教程中,我们将编写一个程序,在二进制矩阵中找到最近的 1。

让我们看看解决问题的步骤。

  • 初始化所需大小的矩阵。

  • 初始化另一个相同大小的矩阵来存储距离。

  • 遍历整个矩阵

    .

    • 再次迭代整个矩阵

    • 如果单元格为 1,则计算与当前单元格的距离。

    • 更新最小距离。

      .

    • 如果当前单元格值为 1,则将距离设置为 0,因为从 1 到 1 的距离为 0

    • 如果当前单元格值为 0

    • 打印距离矩阵。

    示例

    让我们看看代码。

    #include <bits/stdc++.h>

    using namespace std;

    vector<vector<int>> findNearest1Distance(vector<vector<int>>& matrix) {

       int rows = matrix.size();

       if (rows == 0) {

          return matrix;

       }

       int cols = matrix[0].size();

       vector<vector<int>> distance(rows, vector<int>(cols, INT_MAX));

       for (int i = 0; i < rows; i++) {

          for (int j = 0; j < cols; j++) {

             if (matrix[i][j] == 1) {

                distance[i][j] = 0;

             }else if (matrix[i][j]) {

                for (int k = 0; k < rows; k++) {

                   for (int l = 0; l < cols; l++) {

                      if (matrix[k][l] == 1) {

                         distance[i][j] = min(distance[i][j], abs(k - i) + abs(l - j));

                      }

                   }

                }

             }

          }

       }

       return distance;

    }

    int main() {

       vector<vector<int>> matrix{

          {0, 0, 1},

          {1, 1, 0},

          {0, 0, 0}

       };

       vector<vector<int>> result = findNearest1Distance(matrix);

       for (int i = 0; i < 3; i++) {

          for (int j = 0; j < 3; j++) {

             cout << result[i][j] << " ";

          }

          cout << endl;

       }

       return 0;

    }

    输出结果

    如果你运行上面的代码,那么你会得到下面的结果。

    1 1 0

    0 0 1

    1 1 2

    以上是 C ++中二进制矩阵中最接近的1 的全部内容, 来源链接: utcz.com/z/327514.html

    回到顶部