蛇形数组

来源:互联网 发布:淘宝卖家月退款金额 编辑:程序博客网 时间:2024/06/03 02:15

蛇形数组,就是让n*n的数组设置为如下值:

3*3:

1       2       6
3       5       7
4       8       9

4*4:

1        2         6         7
3        5         8        13
4        9        12       14
10      11      15      16

5*5:

1        2         6        7       15
3        5         8       14      16
4        9        13      17      22
10      12      18      21      23
11      19      20      24      25

蛇形图初始方向向右,之后方向转换图如下

代码如下

class SnakingLine{public:enum direction {RIGHT,LEFTDOWN,DOWN,RIGHTUP, };SnakingLine(unsigned int);~SnakingLine();void draw();void show();private:unsigned int m_nSize;unsigned int* m_map;};

SnakingLine::SnakingLine(unsigned int size):m_nSize(size),m_map(NULL){}SnakingLine::~SnakingLine(){if (NULL!= m_map){delete[] m_map;m_map = NULL;}}void SnakingLine::draw(){        if(NULL == m_map)        {    m_map = new unsigned int[m_nSize*m_nSize];        }int x = 0;int y = 0;unsigned counter = 0;direction d = RIGHT;m_map[y * m_nSize + x] = ++counter;while(counter < m_nSize * m_nSize){      switch(d){case RIGHT:++x;if (y == m_nSize -1){d = RIGHTUP;}else if(y == 0){d = LEFTDOWN;}break;case LEFTDOWN:--x;++y;if (y + 2 > m_nSize){d = RIGHT;}else if (x < 1){d = DOWN;}break;case DOWN:++y;if (x < 1){d = RIGHTUP;}else if (x + 2 > m_nSize){d = LEFTDOWN;}break;case RIGHTUP:++x;--y;if (x + 2 > m_nSize){d = DOWN;}else if(y < 1){d = RIGHT;}break;}m_map[y * m_nSize + x] = ++counter;}}void SnakingLine::show(){for(int i = 0; i < m_nSize * m_nSize; ++i){if (i % m_nSize == 0){cout << endl;/* code */}cout << m_map[i] << '\t';}cout << endl;}


原创粉丝点击