文档章节

二维数组给定行列获取周围点的算法

 骑着乌龟赛跑
发布于 2015/08/10 16:57
字数 373
阅读 80
收藏 1

定义方向: 左上=左|上

XxxConstant.h

enum{LEFT = 1, RIGHT = (1 << 1), TOP = (1 << 2), BOTTOM = (1 << 3), LEFT_TOP = (LEFT|TOP), RIGHT_TOP=(RIGHT|TOP), LEFT_BOTTOM=(LEFT|BOTTOM), RIGHT_BOTTOM=(RIGHT|BOTTOM)};

int DIRECTIONS[8] = {LEFT, RIGHT, TOP, BOTTOM, LEFT_TOP, RIGHT_TOP, LEFT_BOTTOM, RIGHT_BOTTOM};


Cell.h代码如下: 表示数组元素所在位置  

#pragma once
#include <vector>
class Cell
{
private:
    int row;
    int column;
    int direction;
    bool exists;
public:
    Cell(int direction):direction(direction){};
    Cell(int direction, int row, int column, bool exists):direction(direction), row(row), column(column), exists(exists){};
    ~Cell(void);

    inline int getRow(){
        return row;
    }
    inline int getColumn(){
        return column;
    }
    inline int getDirection(){
        return direction;
    }
    inline bool isExists(){
        return exists;
    }

    std::vector<Cell*> getSurroundCell(int maxRow, int maxColumn);
};


Cell.cpp:  Cell::getSurroundCell算法实现

#include "Cell.h"
#include "MineConstant.h"

std::vector<Cell*> Cell::getSurroundCell(int maxRow, int maxColumn){
    std::vector<Cell*> ret;
    int direction = 0;
    if(row > 0){ //不在第一行
        direction |= TOP;
    }
    if(row < maxRow - 1){
        direction |= BOTTOM;
    }
    if(column > 0){
        direction |= LEFT;
    }
    if(column < maxColumn - 1){
        direction |= RIGHT;
    }

    int directionCount = sizeof(DIRECTIONS) / sizeof(direction);
    for(int i = 0; i < directionCount; i++){
        int direct = DIRECTIONS[i];
        Cell* cell = nullptr;
        if((direction & direct) == direct){
            switch (direct)
            {
            case LEFT:
                cell = new Cell(direct, row, column - 1, true);
                break;
            case RIGHT:
                cell = new Cell(direct, row, column + 1, true);
                break;
            case TOP:
                cell = new Cell(direct, row - 1, column, true);
                break;
            case BOTTOM:
                cell = new Cell(direct, row + 1, column, true);
                break;
            case LEFT_TOP:
                cell = new Cell(direct, row - 1, column - 1, true);
                break;
            case LEFT_BOTTOM:
                cell = new Cell(direct, row + 1, column - 1, true);
                break;
            case RIGHT_TOP:
                cell = new Cell(direct, row - 1, column + 1, true);
                break;
            case RIGHT_BOTTOM:
                cell = new Cell(direct, row + 1, column + 1, true);
                break;
            default:
                break;
            }
        }

        if(cell){
            ret.push_back(cell);
        }
    }

    return ret;
}

Cell::~Cell(void)
{
}


© 著作权归作者所有

粉丝 2
博文 24
码字总数 11215
作品 0
浦东
私信 提问
LeetCode算法题-Image Smoother(Java实现)

这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661)。给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以使每个单元...

小川94
03/20
0
0
LeetCode算法题-Reshape the Matrix(Java实现)

这是悦乐书的第264次更新,第277篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第131题(顺位题号是566)。在MATLAB中,有一个非常有用的函数叫做'reshape',它可以将矩阵重新...

小川94
03/02
0
0
LeetCode算法题-Range Addition II(Java实现)

这是悦乐书的第271次更新,第285篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第138题(顺位题号是598)。给定一个m行n列的新二维数组M,其初始值为0。提供一个二维数组ops...

小川94
03/09
0
0
leetcode|初级算法-数组

01 起 最近“不务正业地”刷了一波leetcode上的算法题,初级算法已经刷完50%,战况如下, 刷题固然爽快,但及时总结才是进步之道,下面就数组部分的题目进行回顾和总结。 注意,刷题使用的语...

邓莎
2018/09/05
0
0
Java语言学习(四):数组及常用操作

众所周知,坐标系有一维、二维、三维,Java中数组也不例外,像一维数组、二维数组,下面就数组来说下相关知识。 先通过简单的案例来熟悉数组: (1)任务:实现二维数组的行列互换 (2)准备...

海岸线的曙光
2018/07/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
56分钟前
3
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
8
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
4
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部