蛇形矩阵详解

xiaoxiao2025-10-17  12

问题描述: 在n*n方阵中填入1,2,3,....,n*n,要求填成蛇形状。 如 10  11  12  1 9   16  13  2 8   15  14  3 7   6   5   4 类似上面这种矩阵像蛇一样弯进来的。


分析: 首先,我们碰到矩阵这一类问题,我们可以将里面的数据使用二维数组存储。 其实每一个蛇形矩阵都是从第一行第n列开始的,先向下移动,当发现移动不了(这里的意思是指越界),就开始向左移动,当左边移动不了,就向上移动,向上移动不了就向右移动,向右移动不了就再向下移动,以此类推。 根据上述4*4的矩阵我们先将1存入到矩阵的右上角,模拟开始移动,因为移动的方向只能是下、左、上、右....以此类推。设置四个循环即可。  


源代码:

#include<iostream> #include<cstdio> #include<cstring> using namespace std; int num[10][10]; int main() { memset(num,0,sizeof(num)); //将矩阵初始化 int n; cout<<"请输入蛇形矩阵的维数:"<<endl; cin>>n; int x = 0; //表示矩阵的行 int y = n-1; //表示矩阵的列 int rs; //表达每一步的值 (1,2,3,4...16) rs = num[x][y] = 1; while(rs<n*n) //这个循环是判断矩阵里的数值不能超过n*n { while(x<n-1 && !num[x+1][y]) //!num[x+1][y]想当于判断向下走是否越界,因为我们给数组初始化为0 { num[++x][y] = ++rs; } while(y>0 && !num[x][y-1]) //!num[x][y-1]相当于判断向左走是否越界 { num[x][--y] = ++rs; } while(x>0 && !num[x-1][y]) //!num[x-1][y]相当于判断向上走是否越界 { num[--x][y] = ++rs; } while(y<n-1 && !num[x][y+1]) //!num[x][y+1]相当于判断向右走是否越界 { num[x][++y] = ++rs; } } for(int i = 0;i<n;i++) { for(int j = 0;j<n;j++) { printf("%3d",num[i][j]); } cout<<endl; } return 0; }

 

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

最新回复(0)