C++ 找到二进制矩阵的出口点

C++ 找到二进制矩阵的出口点

二进制矩阵指的是计算机编程术语中由0和1组成的行列网格。在编程面试和比赛中,确定二进制矩阵中的出口点是一个常见的编程挑战。在本文中,我们将解释使用C++解决这个问题的不同方法。

语法

在深入算法之前,了解即将在我们的代码示例中频繁出现的语法可能会有所帮助。

`pair<int, int> findExitPoint(const vector<vector<int>>& matrix)`.

步骤

现在,让我们概述一下在二进制矩阵中找到出口点的逐步算法:

  • 将当前单元格位置初始化为(0, 0)。

  • 从当前单元格开始遍历矩阵。

  • 如果当前单元格为1,则按优先顺序移动到下一个单元格 – 右,下,左,上。

  • 如果当前单元格为0,则退出循环,并将当前单元格位置作为出口点返回。

  • 重复步骤3和4,直到找到出口点或遍历所有单元格。

方法1

在方法1中,我们建议实现算法的同时使用while循环和条件语句。以下是该实现的示例:

示例

#include <iostream>
#include <vector>
using namespace std;

pair<int, int> findExitPoint(const vector<vector<int>>& matrix) {
   int rows = matrix.size();
   int cols = matrix[0].size();
   int x = 0, y = 0;  // Starting cell position

   while (x >= 0 && x < rows && y >= 0 && y < cols) {
      if (matrix[x][y] == 1) {
         // Move right
         if (y + 1 < cols && matrix[x][y + 1] == 1)
            y++;
         // Move down
         else if (x + 1 < rows && matrix[x + 1][y] == 1)
            x++;
         // Move left
         else if (y - 1 >= 0 && matrix[x][y - 1] == 1)
            y--;
         // Move up
         else if (x - 1 >= 0 && matrix[x - 1][y] == 1)
            x--;
      } else {
         break;  // Exit loop when encountering a 0
      }
   }

   return make_pair(x, y);
}

int main() {
   // Matrix initialization
   vector<vector<int>> matrix = {
      {1, 0, 0, 1},
      {1, 1, 0, 1},
      {0, 1, 1, 1},
      {0, 0, 0, 1}
   };

   // Finding the exit point
   pair<int, int> exitPoint = findExitPoint(matrix);

   // Printing the exit point coordinates
   cout << "Exit Point: (" << exitPoint.first << ", " << exitPoint.second << ")" << endl;

   return 0;
}

输出

Exit Point: (3, 3)

方法2

为了处理单元格移动,我们的第二种方法使用do while循环与switch语句结合使用。供参考,这是实现的示例−

示例

#include <iostream>
#include <vector>
using namespace std;

pair<int, int> findExitPoint(const vector<vector<int>>& matrix) {
   int rows = matrix.size();
   int cols = matrix[0].size();
   int x = 0, y = 0;  // Starting cell position

   do {
      switch (matrix[x][y]) {
         case 1:  // Move based on the priority order
            if (y + 1 < cols && matrix[x][y + 1] == 1) {
               y++;  // Move right
            } else if (x + 1 < rows && matrix[x + 1][y] == 1) {
               x++;  // Move down
            } else if (y - 1 >= 0 && matrix[x][y - 1] == 1) {
               y--;  // Move left
            } else if (x - 1 >= 0 && matrix[x - 1][y] == 1) {
               x--;  // Move up
            }
            break;

            default:  // Exit loop when encountering a 0
         break;
      }
   } while (x >= 0 && x < rows && y >= 0 && y < cols);

   return make_pair(x, y);
}

int main() {
   // Matrix initialization
   vector<vector<int>> matrix = {
      {1, 0, 0, 1},
      {1, 1, 0, 1},
      {0, 1, 1, 1},
      {0, 0, 0, 1}
   };

   // Finding the exit point
   pair<int, int> exitPoint = findExitPoint(matrix);

   // Printing the exit point coordinates
   cout << "Exit Point: (" << exitPoint.first << ", " << exitPoint.second << ")" << endl;

   return 0;
}

输出

Exit Point: (3, 3)

解释

函数findExitPoint是在提供的代码中创建的。它的目的是以一个二进制矩阵作为输入,并输出一对整数,对应于出口坐标。该函数遵循所概述的算法,遍历矩阵并找到出口点。

在使用两种实现技术之一遍历矩阵时,为了跟踪当前单元格位置,我们利用变量xy。然后,我们使用循环根据优先级顺序移动到矩阵中的位置:右、下、左和上。

向着方法1移动使用while循环,我们使用if-else语句检查每个单元格的值。假设当前单元格为1,我们向指定方向移动到下一个单元格。如果当前单元格为0,我们跳出循环并将当前单元格位置作为出口点返回。

方法2使用do-while循环和switch语句来处理单元格移动。为了有效地进行导航过程,我们采用了基于条件的执行路径,专门适应与每个给定当前单元格值对应的方向移动。实质上,当处理值为1的当前单元格时,快速进行调整以适应我们的x和y坐标值中所需的任何变化。假设当前单元格为0,我们跳出循环。

main函数中,我们初始化一个二进制矩阵,并调用findExitPoint函数以获取出口点的坐标。最后,我们使用cout打印出口点的坐标。

结论

在二进制矩阵中找到出口点是一个经常遇到的编程任务,提出了各种解决路径。本文深入探讨了在C++代码中实现的两种不同方法来解决这个障碍。成功应用这些算法可以有效地输出识别二进制矩阵结束或导向终点位置的位置。记得选择符合你期望的编码风格和最终目标的策略。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程