方向数组

本文介绍了一种使用方向数组进行坐标变换的方法,适用于二维平面上的上下左右及对角线方向的遍历。通过示例代码展示了如何定义方向数组并利用其进行坐标计算,适用于算法竞赛及游戏开发等领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方向数组

我理解的方向数组,与坐标有关系,直接看个图*:例如* 这里写图片描述

你可以这样定义:
模板如下:

int map[4][2]={{-1,0},{1,0},{0,1},{0,-1}}//左 右 上 下
fx=x;fy=y;//x y表当前坐标
for(int i=0;i<4;i++){
fx=x+map[i][0];
fy=y+map[i][1];//四个方向遍历
......
}
/*其实 map[4][2]可以拆分为:
    map[0][0]=-1;
    map[0][1]=0;
    map[1][0]=1;
    map[1][1]=0;
    map[2][0]=0;
    map[2][1]=1;
    map[3][0]=0;
    map[3][1]=-1;
    这样就比较容易理解了~*/

也可以定义八个方向的:
这里写图片描述
模板如下:

int spx[] = {0,1,0,-1,1,1,-1,-1};
int spy[] = {1,0,-1,0,-1,1,1,-1};
for(int i = 0;i <8 ;++i){//左上左下右上右下还包括相邻的
        int nx = x+ spx[i];
        int ny = y +spy[i];
        ......
        }

或者

int xy[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,-1},{1,1},{-1,-1},{-1,1}};
for(int i=0;i<8;i++){
        int nx=x+xy[i][0];
        int ny=y+xy[i][1];
        .....
        }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值