蛇形矩阵算法下的小程序开发(博主的第一篇博客)

本文所展示的小程序是在蛇形矩阵(螺旋式)基础上加以利用编写的一个小程序。

程序描述:一个点从矩阵的边界的一个角开始螺旋式运动到矩阵的中心。

编写目的:因为一个假期过去了,忘记了不少,突然想到就拿它练练手(ps:一个暑假确实忘记了不少东西)。

程序展示:

#include <iostream>
#include <windows.h>


using namespace std;

//将x作为行,y作为列(便于理解)

//go_Snake()方法将数字(从1递增到100的变化)螺旋式存入二维数组中(将二维数组比作一张二维表就不难理解了)

void go_Snake(int (* &arr)[10], int& Start, int& End, int& i){
    if(Start >= End){ //如果当相对的两边界相交时,退出递归
        return;
    }
    int y = Start; //x开始的位置
    int x = Start;//y开始的位置

//开始一个“回”字形的给二维数组递增赋值

//第一个for循环,对“回”字形(二维数组)的上边界赋值
    for(; y < End; y++)
        arr[x][y] = i++;
    y--;x++; //设置开始对“回”字形右边界进行赋值的x,y的位置

//第二个for循环,对“回”字形(二维数组)的右边界赋值
    for(; x < End; x++)
        arr[x][y] = i++;
    x--;y--; //设置开始对“回”字形边界进行赋值的x,y的位置

//第三个for循环,对“回”字形(二维数组)的下边界赋值
    for(; y >= Start; y--)
        arr[x][y] = i++;
    x--;y++; //设置开始对“回”字形边界进行赋值的x,y的位置
    for(; x > Start; x--) //这里需要注意的是,由于还要继续进行下一个以“回”字形方式对二维数组赋值,x必须从开始行的下一行继续环绕,所以是" x > Start "
        arr[x][y] = i++;
    return go_Snake(arr, ++Start, --End, i); //递归
}

//打印每一次黑点前进形的矩阵

//至于index的使用,读者自己思考一下就能懂的
void print(int (* &arr)[10], const int& limited, const int& index){
    for(int i = 0; i < limited; i++){
        for(int j = 0; j < limited; j++){
            if(arr[i][j] == index){
                cout<<"● "; //可能会出现编码格式的问题,可以换一个字符代替
            }
            else{
                cout<<"o ";
            }
        }
        cout<<endl;
    }
}

//quanquanrao()方法(程序第二个递归):作用就是清除前一个黑点移动的矩阵图像,刷新打印下一个黑点移动位置的矩阵图像,直到黑点进入矩阵的中心,来实现黑点螺旋

//缩进环绕运动(博主物理运动相关知识欠缺,暂且先这么命名)。

void quanquanrao(int (* &arr)[10], int& limited, int& index){
    if(index >= limited*limited){
        return;
    }
    print(arr, limited, index);
    if(index < limited*limited - 1){ //保留黑点进入矩阵中心的图形
        system("cls");
    }
    return quanquanrao(arr, limited, ++index);
}

int main()
{
    int (*number)[10] = new int[10][10];  //动态分配堆内存

//由于以上方法都涉及变量的引用,所以现在这里定义了
    int i = 1;
    int Start = 0;
    int End = 10;
    int limited = 10;
    int index = 1;
    go_Snake(number, Start, End, i);
 
    quanquanrao(number, limited, index);
    cout<<"Finish !!"<<endl;
    delete[] number; //系统回收动态分配的堆内存
}


//竟然写了第一篇博客了,以后也会经常写了。

发布了31 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36557960/article/details/77772143