1、简单描述
可多组输出,输入n,输出n*n方阵。
2.思路
#include <bits/stdc++.h>
using namespace std;
int Arr[100][100];
void f(int left, int right, int up, int down, int v, int n)
{
if(left <= right)
{
for (int i = left; i <= right; i++)
Arr[up][i] = v++;
for (int k = up + 1;k < down; k++)
Arr[k][right] = v++;
for (int j = right; j > left; j--)
Arr[down][j] = v++;
for (int m = down; m > up; m--)
Arr[m][left] = v++;
f(left + 1, right - 1, up + 1, down - 1, v, n);
}
else
{
for(int x = 0; x < n; x++)
{
for(int y = 0; y < n; y++)
{
if(y != 0)
cout << '\t' << Arr[x][y];
else
cout << Arr[x][y];
}
cout << endl;
}
}
}
int main(int argc, char* argv[])
{
int n, t;
cin >> t;
while(t--)
{
cin >> n;
f(0, n - 1, 0, n - 1, 1, n);
cout << endl;
}
return 0;
}
从外层到内层逐层缩小范围直至结束。
每一层都为一个递归函数。