有一个n*n的棋盘,每个位置上都有一个棋子,白子用0表示,黑子用1表示。当你翻转棋盘上的一枚棋子时,不但会改变这枚棋子本身的颜色,还会使其上下左右四个紧挨着的棋子颜色改变(颜色只有黑白两种,因此每次翻转黑子会变为白子,白子会变为黑子)。现在给定k条翻转指令,每条指令包含一枚需要翻转的棋子的位置信息,求全部指令执行完成后棋盘的最终状态。 c++代码 输入 Copy 4 3 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 2 2 3 3 4 1 输出 Copy 0 1 0 0 1 0 1 0 1 1 0 1 1 1 1 0
时间: 2023-12-31 20:06:15 浏览: 121
以下是一个 C++ 代码实现:
```cpp
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N = 15;
int a[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];
vector<pair<int, int>> ops;
for (int i = 0; i < k; i++)
{
int x, y;
cin >> x >> y;
ops.push_back(make_pair(x, y));
}
for (auto op : ops)
flip(op.first, op.second, n);
// 输出最终状态
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << a[i][j] << " ";
cout << endl;
}
return 0;
}
```
该代码定义了一个 `flip()` 函数来翻转棋子和其周围四个棋子的颜色。然后读入棋盘的大小和翻转指令,并根据指令依次执行翻转操作。最后输出最终状态即可。
阅读全文