一.编程打印如图所示的n×n的方阵。 如图为顺时针螺旋: 算法思想:先把图形分成几个圈,及“1~12”为第一圈,“13~16”为第二圈;并定义下标变量是i,由于n与圈数的关系,(例如n=3、4均为两圈),所以下标变量范围1~(n+1)/2。 (1)i行,从i列到n-i列 (n=4,i=1时“摆放1,2,3”) 上方 (2)n+1-i列,从i行到n-i行 (n=4,i=1时“摆放4,5,6”) 右侧 (3)n+1-i行,从n+1-i行到i+1列(n=4,i=1时“摆放7,8,9”)下方 (4)i列,从n+1-i行到i+1行 (n=4,i=1时“摆放10,11,12”)左侧 程序如下:

#include<stdio.h>
void main()
{
	int i,j,a[100][100],n,k;
	printf("输入n的值:");
	scanf("%d",&n);
	k=1;
	for(i=1;i<=n/2;i=i+1)
	{
		for(j=i;j<=n-i;j=j+1)    //上方	
		{
			a[i][j]=k;
			k=k+1;
		}
		for(j=i;j<=n-i;j=j+1)    //右侧
		{
			a[j][n-i+1]=k;
			k=k+1;
		}
		for(j=n-i+1;j>=i+1;j=j-1)    //下方
		{
			a[n-i+1][j]=k;
			k=k+1;
		}
		for(j=n-i+1;j>=i+1;j=j-1)    //左侧
		{
			a[j][i]=k;
			k=k+1;
		}
	}
	if(n%2==1)
	{
		i=(n+1)/2;
		a[i][i]=n*n;
	}
	for(i=1;i<=n;i=i+1)
	{
		for(j=1;j<=n;j=j+1)
			printf("%4d",a[i][j]);
		printf("\n");
	}
	printf("\n");
}

若想要做一个逆时针的螺旋矩阵,只需要改改逻辑值就好了 二.C++深度优先搜索版m*n的螺旋矩阵(其中填充的东西是A~Z循环填写) eg:

#include <iostream>
#include <vector>
using namespace std;

//四个方向位(右、下、左、上)
int dx[] = { 0, 1, 0, -1 };
int dy[] = { 1, 0, -1, 0 };


//通过计数器来判断是否需要退出
void DFS2(vector<vector<char>>& v, vector<bool>& flag, int x, int y, int m, int n, char chars,int& count){
	if (chars > 'Z'){
		chars = 'A';
	}
	v[x][y] = chars;
	count++;
	if (count == m*n)
		return;
	for (int i = 0; i<4; i++){
		if (flag[i] == true){
			int nx = x + dx[i];
			int ny = y + dy[i];
			if (nx<0 || nx >= m || ny<0 || ny >= n || v[nx][ny] != ' '){
				if (i == 3){
					flag[0] = true;
					flag[i] = false;
					i = -1;
				}
				else{
					flag[i + 1] = true;
					flag[i] = false;
				}
				continue;
			}
			DFS2(v, flag, nx, ny, m, n, chars + 1,count);
			if (count == m*n)
				return;
		}
	}
}

int main(){
	int m, n;
	cin >> m >> n;
	vector<vector<char>> v(m, vector<char>(n, ' '));
	vector<bool> flag(4);//用来判断使用哪个方向
	flag[0] = true;
	int count = 0;
	DFS2(v,flag, 0, 0, m, n, 'A',count);
	for (int i = 0; i<m; i++){
		for (int j = 0; j<n; j++){
			if (j == n - 1)
				cout << v[i][j];
			else
				cout << v[i][j] << " ";
		}
		cout << endl;
	}
	return 0;
}