二维坐标建立的时候从1开始存,把图的周围全变成0方便计算
#include<stdio.h>
int n , m,arr[1002][1002];
int Map(int x,int y)
{
int sum=0;
if(arr[x][y] == 0)
return sum;
else
{
if(arr[x][y]-arr[x-1][y] >0)
sum += arr[x][y]-arr[x-1][y];
if(arr[x][y]-arr[x][y+1]> 0)
sum += arr[x][y]-arr[x][y+1];
if(arr[x][y]-arr[x+1][y] > 0)
sum += arr[x][y]-arr[x+1][y];
if(arr[x][y]-arr[x][y-1] > 0)
sum += arr[x][y]-arr[x][y-1];
return sum+1;
}
}
int main()
{
int T,num,i,j;
scanf("%d",&T);
while(T--)
{
num=0;
scanf("%d%d",&n,&m);
for(i=0 ; i <= m ; i++)
{
arr[0][i]=0;
arr[n+1][i]=0;
}
for(i = 1 ; i <= n;i++)
for(j = 1 ; j <= m ; j++)
{
arr[i][j+1]=0;
scanf("%d",&arr[i][j]);
}
for(i = 1 ; i <= n;i++)
for(j = 1 ; j <= m ; j++)
{
num += Map(i,j);
// printf("地图 %d %d 面积 %d\n",i,j,Map(i,j));
}
printf("%d\n",num);
}
return 0;
}