有一个n*n的棋盘,每个位置上都有一个棋子,白子用0表示,黑子用1表示。当你翻转棋盘上的一枚棋子时,不但会改变这枚棋子本身的颜色,还会使其上下左右四个紧挨着的棋子颜色改变(颜色只有黑白两种,因此每次翻转黑子会变为白子,白子会变为黑子)。现在给定k条翻转指令,每条指令包含一枚需要翻转的棋子的位置信息,求全部指令执行完成后棋盘的最终状态。 c++代码
时间: 2024-02-13 14:06:57 浏览: 57
以下是一个可能的C++代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
const int N = 15;
int a[N][N], b[N][N];
void flip(int x, int y, int n)
{
a[x][y] ^= 1;
if (x > 0) a[x - 1][y] ^= 1;
if (y > 0) a[x][y - 1] ^= 1;
if (x < n - 1) a[x + 1][y] ^= 1;
if (y < n - 1) a[x][y + 1] ^= 1;
}
int main()
{
int n, k;
cin >> n >> k;
memset(a, 0, sizeof(a));
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
while (k--)
{
int x, y;
cin >> x >> y;
flip(x, y, n);
}
memcpy(b, a, sizeof(a)); // 备份一份最终状态
// 输出最终状态
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << b[i][j] << " ";
cout << endl;
}
return 0;
}
```
该代码定义了一个 `flip()` 函数来翻转棋子和其周围四个棋子的颜色。然后读入棋盘的大小和翻转指令,并根据指令依次执行翻转操作。最后备份一份最终状态,然后输出即可。
阅读全文