C语言 蛇形数组 螺旋矩阵

输出蛇形矩阵 (顺时针螺旋矩阵)

C语言 蛇形数组 螺旋矩阵_第1张图片
思路在注释里

#include
using namespace std;
#include	//setw头文件
#define MAX 1000
int main()
{
	int n = 5;
	int a[n][n] = {0};
	int k = 1;	//元素值
	int top = 0, bottom = n-1, left = 0, right = n-1;	//标记边界,因为一圈一圈往里走,边界是变化的  
	//分别代表上、下、左、右
	
	int t, b, l = left, r;	//赋值时用于指向当前位置 顺时针方向,先往右走,给l赋初值left
	//分别代表从上往下赋值、从下往上赋值、从左往右赋值、从右往左赋值
	//即t的边界是bottom,b的边界是top,l的边界是right,r的边界是left 分别对应以下while循环中的四个while循环
	
	while(k <= n*n){	//循环n*n次,一个一个为元素赋值
		while(l <= right)	//向右
			a[top][l++] = k++;	//赋值
		++top;	//top行赋值完毕,下一次转回来时需要指到内圈,所以top更新
		t = top;	//顺时针,此时应该向下走
		
		//以下思路同上,注意每次需要更新边界!
		while(t <= bottom)	//向下
			a[t++][right] = k++;
		--right;
		r = right;

		while(r >= left)	//向左
			a[bottom][r--] = k++;
		--bottom;
		b = bottom;

		while(b >= top)	//向上
			a[b--][left] = k++;
		++left;
		l = left;
	}
	
	//输出
	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++)
			cout << setw(2) << a[i][j]<<" ";
		cout<<endl;
	}
}

输出逆时针螺旋矩阵

C语言 蛇形数组 螺旋矩阵_第2张图片
思路同上实现顺时针,只要换一下顺序就好。

#include
#include 
using namespace std;
#define MAX 500
int main()
{
	int n;
	cin >> n;
	int a[MAX][MAX];
	
	int top = 0, bottom = n-1, left = 0, right = n-1;//标记边界,因为一圈一圈往里走,边界是变化的
	int t = top, b, l, r;//赋值时用于指向当前位置
	int k = 1;//元素值
	while (k <= n * n){
		while (t <= bottom)
			a[t++][left] = k++;
		++left;
		l = left;

		while(l <= right)
			a[bottom][l++] = k++;
		--bottom;
		b = bottom;

		while(b >= top)
			a[b--][right] = k++;
		--right;
		r = right;

		while(r >= left)
			a[top][r--] = k++;
		++top;
		t = top;
	}
	//输出
	for(int i = 0; i < n; i++)
	{
		for (int j = 0; j < n; j++)
			cout << setw(2) << a[i][j]<<" ";
		cout <<endl;
	}
}

你可能感兴趣的:(C,c语言,矩阵,算法)