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

xiaoxiao2021-02-28  59

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

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

编写目的:因为一个假期过去了,忘记了不少,突然想到就拿它练练手(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; //系统回收动态分配的堆内存 }

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

转载请注明原文地址: https://www.6miu.com/read-77914.html

最新回复(0)