这段C++代码实现了一个螺旋填充n×n矩阵的算法。程序首先读取整数n,然后创建一个n×n的零矩阵。通过定义四个方向(右、下、左、上),从(0,0)位置开始按顺时针螺旋顺序填充数字1到n²。当遇到边界或已填充位置时,算法会顺时针旋转90度寻找下一个可填充位置。最后输出完整的螺旋矩阵。例如输入4时,输出如题目所示的特定数字排列。该算法通过方向向量和边界检查实现了矩阵的螺旋填充功能。
输入
4
输出
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
vector<vector<int>> matrix(n, vector<int>(n, 0));
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int x=0,y=0;
int d=0;
int num=1;
matrix[x][y]=num++;
while(num<=n*n){
int nx=x+dx[d];
int ny=y+dy[d];
if(nx>=0&&nx<n&&ny>=0&&ny<n&&matrix[nx][ny]==0){
x=nx;
y=ny;
}else{
bool found=false;
for (int i=1;i<=3;i++){
int nd=(d+i)%4;
int nx=x+dx[nd];
int ny=y+dy[nd];
if(nx>=0&&nx<n&&ny>=0&&ny<n&&matrix[nx][ny]==0) {
d=nd;
x=nx;
y=ny;
found=true;
break;
}
}
}
matrix[x][y]=num++;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<matrix[i][j];
if(j<n-1)cout<<" ";
}
cout<<endl;
}
return 0;
}