概述
问题描述:
在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;
}
最后
以上就是善良乌冬面为你收集整理的蛇形矩阵详解的全部内容,希望文章能够帮你解决蛇形矩阵详解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复