按要求输出方阵。
输入格式
为一个正整数n,0<n<10,代表方阵的阶数。
输出格式
从左上角元素开始,用1到n平方的正整数,按顺时针螺旋方式填充nXn二维数组,见样例(当n=4时)。按行输出所得二维数组。每个整数占两个字符位置右对齐,两个整数之间用一个空格分隔。行末没有空格。
输入样例
4
输出样例
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
代码
#include<stdio.h>
int wx[4] = {1, 0, -1, 0};
int wy[4] = {0, 1, 0, -1};
int n;
int matrix[10][10];
int right, left, floor_, ceil_;
void dfs(int x, int y, int w, int step);
int main(void) {
scanf("%d", &n);
right = n - 1; left = 0;
floor_ = n - 1; ceil_ = 0;
dfs(0, 0, 0, 1);
for(int i = 0; i < n; i++) {
for(int j = 0; j < n - 1; j++) {
printf("%2d ", matrix[i][j]);
}
printf("%2d\n", matrix[i][n - 1]);
}
return 0;
}
void dfs(int x, int y, int w, int step) {
matrix[y][x] = step;
if(step == n * n)
return;
int tx = x + wx[w];
int ty = y + wy[w];
if(tx > right || tx < left || ty > floor_ || ty < ceil_) {
tx = x;
ty = y;
w = (w + 1) % 4;
if(w == 0) {
left++; floor_--;
}
if(w == 2) {
right--; ceil_++;
}
dfs(tx, ty, w, step);
return;
}
dfs(tx, ty, w, step + 1);
return;
}