思路:这题你要发现题目的漏洞,保证所有的数都相等,那么处于0和处于n+1位置的所有数一直是0(也就是棋盘边上的一圈位置一直是0),因为其不能被调整。那么就转换为了将所有数都按照规则转换全部都转换为0即可。要求是比周围都大可以减一,比周围都小加一,但是如果两个相邻数都是正数,那么变换到最后最多就是相等,永远不会减到0,两个相邻的负数也是如此最后加到两个数相等,永远不会为0。那么就要排除这种相邻同号的数,直接两层循环能过遍历判断即可!(数据量比较小哈,暴力枚举就过了),纯纯思维题,一定要考虑负数情况!因为如果相邻两个数异号最后负数部分会加到0或者正数减到0,满足一个数周围都是0,最后操作完这一圈5个数一定都为0!!!细心一点不难哈!

#include<bits/stdc++.h>
using namespace std;
#define int long long

void solve() {
    int n;
    cin >> n;
    vector<vector<int>>a(n + 2, vector<int>(n + 2));
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> a[i][j];
        }
    }
    bool res = true;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            if (a[i][j] > 0 && (a[i - 1][j] > 0 || a[i][j - 1] > 0 || a[i + 1][j] > 0 ||
                                a[i][j + 1] > 0)) {
                res = false;
            } else if (a[i][j] < 0 && (a[i - 1][j] < 0 || a[i][j - 1] < 0 ||
                                       a[i + 1][j] < 0 || a[i][j + 1] < 0)) {
                res = false;
            }
        }
    }
    cout << (res == true ? "YES" : "NO") << endl;
}

signed main() {
    ios::sync_with_stdio(false), cout.tie(0), cin.tie(0);
    int t = 1;
    while (t--) {
        solve();
    }
    return 0;
}