这道题需要把点保存在一个数组中,对数组中任意两个点判断它们之间的关系,是相邻还是位于斜对角。注意,这样的关系是相互的。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
vector<vector<int>> a;
vector<int> b,c;
cin >> n;
b.resize(n);
c.resize(n);
for (int i = 0; i < n; ++i) {
int x, y;
cin >> x >> y;
a.push_back({ x,y });
}
for (int i = 0; i < n-1; ++i) {
for (int j = i+1; j < n; ++j) {
if ((a[j][0] == a[i][0] && (a[j][1] == a[i][1] + 1 || a[i][1] == a[j][1] + 1)) || (a[j][1]==a[i][1] && (a[j][0] == a[i][0] + 1 || a[i][0] == a[j][0] + 1))) {
++b[i]; ++b[j];
}
else if ((a[j][0] == a[i][0] - 1 && a[j][1] == a[i][1] - 1) || (a[j][0] == a[i][0] - 1 && a[j][1] == a[i][1] + 1) || (a[j][0] == a[i][0] + 1 && a[j][1] == a[i][1] - 1) || (a[j][0] == a[i][0] + 1 && a[j][1] == a[i][1] + 1)) {
++c[i]; ++c[j];
}
}
}
vector<int> a1(5);
for (int i = 0; i < n; ++i) {
if (b[i] == 4) {
++a1[c[i]];
}
}
for (int i = 0; i < 5; ++i) {
cout << a1[i] << endl;
}
}