蛇形矩阵与螺旋矩阵

Posted Flammable_ice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蛇形矩阵与螺旋矩阵相关的知识,希望对你有一定的参考价值。

自己写的蛇形矩阵:(蛇形矩阵就是在NXN矩阵格子上从左上到右下以“之”字型增加或减少,像蛇盘绕着的形状。本程序从左上开始盘旋一直到右下达到最大值)

#include <iostream>
using namespace std;
#define n 10//输入要更改的矩阵大小
void main()

	int a[n][n]=0,k=1,j=0,i=0,s1[4]=0,1,2,3,t1[4]=1,1,2,2,m=0;
	for (int t=1;t<=n;t++) m+=t;
	while(k!=m+1)//左上三角形
	
		if (s1[0]==k-1)
		
			a[i][j]=k++;
			j++;
		    s1[0]+=2*t1[0]+3; 
			t1[0]+=2;
		
		else if (s1[1]==k-1)
		
			int t=t1[1];
			while(t--)
			
				a[i][j]=k++;
				i++;j--;
			
			s1[1]+=2*t1[1]+3;
			t1[1]+=2;
		
		else if (s1[2]==k-1)
		
			a[i][j]=k++;
			i++;
			s1[2]+=2*t1[2]+3;
			t1[2]+=2;
		
		else //if(s1[3]==k-1)
		
			int t=t1[3];
			while (t--)
			
				a[i][j]=k++;
				i--;j++;
			
			s1[3]+=2*t1[3]+3;
			t1[3]+=2;
		
	
	j=n-1,i=n-1,k=n*n;
	int s2[4]=n*n-1,n*n-2,n*n-3,n*n-4,t2[4]=1,1,2,2;
	while (k!=m)//右下三角形
	
		if (s2[0]==k-1)
		
			a[i][j]=k--;
			j--;
			s2[0]-=2*t2[0]+3; 
			t2[0]+=2;
		
		else if (s2[1]==k-1)
		
			int p=t2[1];
			while(p--)
			
				a[i][j]=k--;
				i--;j++;
			
			s2[1]-=2*t2[1]+3;
			t2[1]+=2;
		
		else if (s2[2]==k-1)
		
			a[i][j]=k--;
			i--;
			s2[2]-=2*t2[2]+3;
			t2[2]+=2;
		
		else //if(s2[3]==k-1)
		
			int p=t2[3];
			while (p--)
			
				a[i][j]=k--;
				i++;j--;
			
			s2[3]-=2*t2[3]+3;
			t2[3]+=2;
		
	
	for (i=0;i<n;i++)
	
		for (j=0;j<n;j++)
		
			cout<<a[i][j]<<" ";
		
		cout<<endl;
	

输出样例:

自己写的螺旋矩阵:(螺旋矩阵像漩涡从外面开始旋转不断旋转到内部,可以是顺时针也可以是逆时针,本程序采用顺时针从外及里不断递增)

#include <iostream>
using namespace std;
#define N 6//输入矩阵的规模
void main()

	int a[N][N]=0,k=1,i=0,j=N-1,p=0,t=1,q=N;//数据初始化
	while(k!=N*N+1)
	//以下判断语句是分成正方形四条边四种情况讨论。
		if ((i==p||i<N-p-1)&&j==N-p-1)//||(i==p&&j==n-p-1))
		
			a[i][j]=k++;
			i++;
		
		else if (j>p&&i==N-p-1)
		
			a[i][j]=k++;
			j--;
		
		else if (i>p&&j==p)
		
			a[i][j]=k++;
			i--;
		
		else if (j<N-p-1&&i==p)
		
			a[i][j]=k++;
			j++;
		
		if(t==4*q-4)//4*q-4为每圈数据个数。
		
			q-=2;//每圈的边,每一圈过后,边都要减少2个单位
			p++;//每圈过后,遍历的起始数据增1,我们从外圈向里圈遍历。
			t=0;//每圈遍历过后,计数器归0。
			i=p;//每圈遍历过后,设置i和j以回归正确的遍历位置。
			j=N-p-1;//每圈遍历过后,设置i和j以回归正确的遍历位置。
		
		t++;
	//时间复杂度为O(N)
	for (i=0;i<N;i++)
	
		for (j=0;j<N;j++)
		
			cout<<a[i][j]<<"\\t";
		
		cout<<endl;
	

输出样例:


以上两个程序均属于原创。

以上是关于蛇形矩阵与螺旋矩阵的主要内容,如果未能解决你的问题,请参考以下文章

Java编码 蛇形矩阵的构建与遍历输出

蛇形矩阵

蛇形矩阵

蛇形三角矩阵

华为OJ076-蛇形矩阵

蛇形矩阵