C++实现魔法矩阵攻击模拟算法及边界处理详解
## 🧙 模拟攻击对魔法矩阵的影响(C++ 实现) 根据题目要求,给定一个 `n*m` 的字符矩阵和一个攻击位置 `(x,y)`,需要将攻击点上方的三个位置(左上方、正上方、右上方)的字符改为 `'0'`。注意:只有存在的位置才修改(即不越界)。 ### 📝 解题思路 - 攻击点的坐标为 `(x,y)`,对应矩阵中的行索引为 `x-1`,列索引为 `y-1`(因为输入从1开始)。 - 需要检查的三个位置是: - 左上方:`(x-2, y-2)`(行减2,列减1) - 正上方:`(x-2, y-1)`(行减2,列不变) - 右上方:`(x-2, y)`(行减2,列加1) - 只要行和列在 `[0, n-1]` 和 `[0, m-1]` 范围内,就将对应字符改为 `'0'`。 - 输出修改后的矩阵,每行元素用空格分隔。 ### 💻 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 x, y; cin >> x >> y; // 转换为0-based索引 int attack_row = x - 1; int attack_col = y - 1; // 检查三个上方位置 // 左上方 int row1 = attack_row - 1, col1 = attack_col - 1; if (row1 >= 0 && row1 < n && col1 >= 0 && col1 < m) { matrix[row1][col1] = '0'; } // 正上方 int row2 = attack_row - 1, col2 = attack_col; if (row2 >= 0 && row2 < n && col2 >= 0 && col2 < m) { matrix[row2][col2] = '0'; } // 右上方 int row3 = attack_row - 1, col3 = attack_col + 1; if (row3 >= 0 && row3 < n && col3 >= 0 && col3 < m) { matrix[row3][col3] = '0'; } // 输出结果 for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (j > 0) cout << " "; cout << matrix[i][j]; } cout << endl; } return 0; } ``` ### 🔍 示例验证 输入: ``` 3 3 A B C D E F G H I 2 2 ``` 攻击位置为 (2,2),即矩阵中的 `E`。上方三个位置为: - 左上方:`A` → `0` - 正上方:`B` → `0` - 右上方:`C` → `0` 输出: ``` 0 0 0 D E F G H I ``` ### ⚠️ 边界情况处理 - 当攻击在第一行时,上方无位置,不修改任何字符。 - 当攻击在边界列时,只修改存在的位置,例如 `(2,1)` 只修改正上方和右上方。 - 矩阵字符保证为英文字母,但修改后可能出现数字 `'0'`,不影响后续处理。 ### 🚀 复杂度分析 - 时间复杂度:O(n*m),遍历一次矩阵进行修改和输出。 - 空间复杂度:O(n*m),用于存储矩阵。 ######[AI问答 | 915点数解答 | 2026-08-21 19:57:48]
- C++ 实现:轻松计算两个矩阵的乘法并输出结果(字节豆包 | 381点数解答 | 2025-12-03 19:20:23)259
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)563
- 深度揭秘 Oracle Workarea Size Policy:参数调优助力数据库性能飞升(阿里通义 | 372点数解答 | 2024-05-13 10:54:45)349
- 网络安全必知:CSRF 攻击揭秘与七大防御妙招! (百度文心 | 239点数解答 | 2023-11-09 18:35:43)305
- 网络安全工程师揭秘:DOS、DDoS、DRDoS攻击原理与防范策略(百度文心 | 327点数解答 | 2023-11-09 18:35:59)300
- CentOS下Java进程出现futex_wait_queue_me问题的处理全流程(阿里通义 | 283点数解答 | 2023-11-20 14:51:26)573
- 替雷利珠单抗致免疫相关性糖尿病:病例报道与机制探讨,为临床用药敲响警钟( | 164点数解答 | 2024-10-11 14:52:52)362
- Python 代码转 C++:计算花朵鲜艳值总和(字节豆包 | 408点数解答 | 2026-04-19 21:50:57)89
- C++前缀和优化区间求和算法详解(DeepSeek | 490点数解答 | 2026-06-20 22:11:10)67
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)477
- Python 实现:根据规则判定 2^n×2^n 方阵中作弊者的赦免命运(字节豆包 | 247点数解答 | 2024-11-03 10:30:46)277
- C语言实现:解决2ⁿ×2ⁿ方阵作弊者赦免问题(字节豆包 | 370点数解答 | 2024-11-03 10:31:31)285