2893: 【例62.2】 相邻数之和

内存限制:64 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:2 解决:2

题目描述

请你编程求出二维数组中某点的相邻数之和。相邻数是指与该点邻接的 $8$ 个元素,若该点在边角位置,则邻接元素相应减少。
下图以 $4$ 行 $5$ 列二维数组 $a$ 为例:$a[2][3]$ 元素的值为 $7$,其邻接元素为 $8,9,10,5,8,6,8,0$ 和为 $54$ 。再比如:$a[1][0]$ 元素的值为 $6$,则其邻接元素为 $1,2,7,3,4$和为 $17$。
1 2 3 4 5
6 7 8 9 10
3 4 5 7 8
2 5 6 8 0

输入

第一行输入 $4$ 个整数:$h$,$l$,$c$,$r$ 分别代表二维数组的行列值和指定点的行列下标。
接下来输入 $h$ 行 $l$ 列的 int 型二维数组 $a$。其中 $2≤h,l≤10$;而 $0≤c,r≤9$;注意下标值从 $0$ 开始。

输出

$a[c][r]$ 的邻接元素之和。

样例输入 复制

4 5 2 3
1 2 3 4 5
6 7 8 9 10
3 4 5 7 8
2 5 6 8 0

样例输出 复制

54

提示

#include<bits/stdc++.h>
using namespace std;
long long a[15][15],h,l,c,r,sum,
dx[8]={-1,-1,-1,0,1,1,1,0},
dy[8]={-1,0,1,1,1,0,-1,-1};
bool check(int x,int y){
    return x>=0&&x<h&&y>=0&&y<l;
}
int main(){
    cin>>h>>l>>c>>r;
    for(int i=0;i<h;i++)
        for(int j=0;j<l;j++)
            cin>>a[i][j];
    for(int i=0;i<8;i++){
        int nx=c+dx[i],ny=r+dy[i];
        if(check(nx,ny)) sum+=a[nx][ny];
    }
    cout<<sum;
    return 0;
}