这还有啥问题吗?越界也解决了
#include <iostream>
#include <vector>
using namespace std;
int n, m, k, x, y, cnt = 0;
//vector< vector<int> > v(n, vector<int>(n, 0));
int v[105][105] = { 0 };
// 检查是否越界
int check(int x) {
if (x < 0)
return 0;
else if (x > n)
return n;
return x;
}
int main() {
cin >> n >> m >> k;
//处理火把
for (int i = 0; i < m; ++i) {
cin >> x >> y;
//标记同一行的四个
for (int j = x - 2; j <= x + 2; ++j)
v[x][check(j)] = 1;
//标记同一列的四个
for (int j = y - 2; j <= y + 2; ++j)
v[check(j)][y] = 1;
//处理四个角
v[check(x - 1)][check(y - 1)] = 1;
v[check(x - 1)][check(y + 1)] = 1;
v[check(x + 1)][check(y - 1)] = 1;
v[check(x + 1)][check(y + 1)] = 1;
}
//处理萤石
//if (k)
for (int i = 0; i < k; ++i) {
cin >> x >> y;
for (int j = x - 2; j <= x + 2; ++j)
for (int k = y - 2; k <= y + 2; ++k)
v[check(j)][check(k)] = 1;
}
//统计未标记个数
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= n; ++j)
if (!v[i][j])
++cnt;
cout << cnt;
return 0;
}