-
首先需要明确题目要求的是一个8×8的棋盘上所有棋子都在同一行或同一列上,且只能移动棋子。
-
可以按照行和列划分开来考虑。特别地,我们可以不考虑棋子的具体种类,只需要知道它们所在的行和列即可。
-
若最终的棋子肯定要在同一行上,那么就需要将所有棋子都放在同一行上。同理,若最终的棋子肯定要在同一列上,那么就需要将所有棋子都放在同一列上。
-
接下来考虑如何保证所有棋子都在同一行/列上。可以先用两个数组 row 和 col 存储每个棋子所在的行和列,然后分别判断它们中是否有元素相同。若有,则输出 Yes;否则,输出 No。
代码示例:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, r, c;
cin >> n;
bool same_row = true, same_col = true;
int rows[8] = {0}, cols[8] = {0}; // 记录每个棋子所在的行和列
for (int i = 0; i < n; i++)
{
cin >> r >> c;
rows[r-1]++;
cols[c-1]++;
}
for (int i = 0; i < 8; i++)
{
if (rows[i] != 0 && rows[i] != n) same_row = false;
if (cols[i] != 0 && cols[i] != n) same_col = false;
}
if (same_row || same_col) cout << "Yes\n";
else cout << "No\n";
return 0;
}