#include <iostream>
using namespace std;
const int N = 10;
int a[N][N];
bool isChange(int n, int sumOld, int sumOven);
void init(int n, int &sumOld, int &sumOven);
int main()
{
int n;
int sumOld = 0, sumOven = 0;
while(cin>>n)
{
if(n==0)
break;
sumOld = 0, sumOven = 0;
init(n, sumOld, sumOven);
if(isChange(n, sumOld, sumOven))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
void init(int n, int &sumOld, int &sumOven)
{
int i,j;
for(i=0; i<n; ++i)
{
for(j=0; j<n; ++j)
{
cin>>a[i][j];
if(((i+j)&1) == 1)
sumOld+=a[i][j];
else
sumOven+=a[i][j];
}
}
}
bool isChange(int n, int sumOld, int sumOven)
{
int i,j;
if(sumOld != sumOven)
return false;
int tmpSum;
for(i=0; i<n; ++i)
{
for(j=0; j<n; ++j)
{
tmpSum = 0;
if(i-1>=0)
tmpSum += a[i-1][j];
if(i+1<n)
tmpSum += a[i+1][j];
if(j-1>=0)
tmpSum += a[i][j-1];
if(j+1<n)
tmpSum += a[i][j+1];
if(a[i][j] > tmpSum)
return false;
}
}
return true;
}
这个题目有意思。。。关键是这个充分必要条件。。这是数论里面的知识吗?