酷代码 AI
菜单
服务商
DeepSeek字节豆包
更多选项

C++实现矩阵中十字图形个数的计算及开发建议

### 🔍思路分析 要计算矩阵中由`#`构成的十字图形的个数,我们需要遍历矩阵中的每个元素,对于每个`#`元素,检查其上下左右四个相邻元素是否也为`#`,如果是,则认为构成一个十字图形。 ### 💻代码实现 ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n, m; // 读取矩阵的行数和列数 cin >> n >> m; // 定义二维向量存储矩阵 vector<vector<char>> matrix(n, vector<char>(m)); // 读取矩阵元素 for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> matrix[i][j]; } } int crossCount = 0; // 遍历矩阵中的每个元素 for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { // 检查当前元素是否为 '#' if (matrix[i][j] == '#') { // 检查上方元素 bool up = (i > 0) && (matrix[i - 1][j] == '#'); // 检查下方元素 bool down = (i < n - 1) && (matrix[i + 1][j] == '#'); // 检查左方元素 bool left = (j > 0) && (matrix[i][j - 1] == '#'); // 检查右方元素 bool right = (j < m - 1) && (matrix[i][j + 1] == '#'); // 如果四个方向的元素都为 '#',则构成十字图形 if (up && down && left && right) { crossCount++; } } } } // 输出十字图形的个数 cout << crossCount << endl; return 0; } ``` ### 📋代码解释 1. **输入处理**: - 首先读取矩阵的行数`n`和列数`m`。 - 然后使用二维向量`matrix`存储矩阵元素,通过嵌套的`for`循环逐行逐列读取矩阵元素。 2. **十字图形判断**: - 遍历矩阵中的每个元素,如果当前元素为`#`,则检查其上下左右四个相邻元素是否也为`#`。 - 通过布尔变量`up`、`down`、`left`和`right`分别表示四个方向的元素是否为`#`。 - 如果四个方向的元素都为`#`,则将十字图形的计数器`crossCount`加 1。 3. **输出结果**: - 最后输出`crossCount`,即十字图形的个数。 ### ⚙️开发建议 - **边界检查**:在检查上下左右元素时,需要注意边界条件,避免越界访问。代码中通过`i > 0`、`i < n - 1`、`j > 0`和`j < m - 1`进行边界检查。 - **代码模块化**:可以将十字图形的判断逻辑封装成一个独立的函数,提高代码的复用性和可读性。例如: ```cpp bool isCross(const vector<vector<char>>& matrix, int i, int j, int n, int m) { bool up = (i > 0) && (matrix[i - 1][j] == '#'); bool down = (i < n - 1) && (matrix[i + 1][j] == '#'); bool left = (j > 0) && (matrix[i][j - 1] == '#'); bool right = (j < m - 1) && (matrix[i][j + 1] == '#'); return up && down && left && right; } int main() { int n, m; cin >> n >> m; vector<vector<char>> matrix(n, vector<char>(m)); for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> matrix[i][j]; } } int crossCount = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { if (matrix[i][j] == '#' && isCross(matrix, i, j, n, m)) { crossCount++; } } } cout << crossCount << endl; return 0; } ``` - **错误处理**:可以增加对输入的合法性检查,例如检查`n`和`m`是否在`1 ≤ n, m ≤ 5`的范围内。 ### 📚学习资源 - [C++ 官方文档](https://en.cppreference.com/w/):提供了 C++ 语言的详细文档和教程。 - 《C++ Primer Plus》:经典的 C++ 学习书籍,适合初学者系统学习 C++ 语言。 ######[AI写代码神器 | 1226点数解答 | 2026-08-08 15:22:21]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]