当时在线写时碰到了定义二维数组时使用 vector<vector<int>> arr,但是在cin >> arr[i][j]; 会出现错误,超出范围的问题,不晓得怎么解决,然后百度后使用了现在定义二维数组的方法,
int **arr; arr = new int *[N]; for (int i = 0; i < N; i++) arr[i] = new int[M];
#include<iostream>
using namespace std;
#include<vector>;
int N, M; int S_L = 0, S_R = 0, S_F = 0, S_B = 0,S=0; //vector<vector<int>> arr;
int main()
{
cin >> N >> M;
//生成二维数组
int **arr;
arr = new int *[N];
for (int i = 0; i < N; i++)
arr[i] = new int[M];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
cin >> arr[i][j];
}
if (N >= 1 && M <= 1000)
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
//当前方块左边的表面积
if (j - 1 < 0)
S_L += arr[i][j];
else
{
if (arr[i][j] - arr[i][j - 1] > 0)
{
S_L = S_L + arr[i][j] - arr[i][j - 1];
}
}
//当前方块右边的表面积
if (j + 1 >= M)
S_R += arr[i][j];
else
{
if(arr[i][j]-arr[i][j+1]>0)
S_R = S_R + arr[i][j] - arr[i][j + 1];
}
//当前块前面的表面积
if (i + 1 >= N)
S_F += arr[i][j];
else
{
if (arr[i][j] - arr[i + 1][j] > 0)
S_F = S_F + arr[i][j] - arr[i + 1][j];
}
//当前块后面的表面积
if (i - 1 < 0)
S_B += arr[i][j];
else
{
if (arr[i][j] - arr[i - 1][j] > 0)
S_B = S_B + arr[i][j] - arr[i - 1][j];
}
}
}
S = S_B + S_F + S_L + S_R + 2 * N*M; //N*M为上下两个面的面积
cout << S<< endl;
}
system("pause");
return 0;
}