- #include<iostream>
- #include<iomanip>
- #define MAX 10
- using namespace std;
- int a[MAX][MAX]= {0};
- int t = 0;
- int N; //要输出的蛇形填数的矩阵行列数
- void Snake(int n, int value, int begin_row, int begin_column)
- {
- if (n == 2) //递归结束条件
- {
- for (int i = begin_row; i < begin_row + n - 1; i++)
- a[i][begin_column] = value++;
- for (int i = begin_column; i > begin_column - n + 1 ; i--)
- a[begin_row + n - 1][i] = value++;
- for (int i = begin_row + n - 1; i >= begin_row ; i--)
- a[i][begin_column - n + 1] = value++;
- for (int i = begin_column - n + 2; i < begin_column; i++)
- a[begin_row][i] = value++;
- return;
- }
- if (n == 3) //递归结束条件
- {
- for (int i = begin_row; i < begin_row + n - 1; i++)
- a[i][begin_column] = value++;
- for (int i = begin_column; i > begin_column - n + 1 ; i--)
- a[begin_row + n - 1][i] = value++;
- for (int i = begin_row + n - 1; i >= begin_row ; i--)
- a[i][begin_column - n + 1] = value++;
- for (int i = begin_column - n + 2; i < begin_column; i++)
- a[begin_row][i] = value++;
- a[(N-1)/2][(N-1)/2] = value;
- return;
- }
- else
- {
- for (int i = begin_row; i <= begin_row + n - 1; i++)
- a[i][begin_column] = value++;
- for (int i = begin_column - 1; i > begin_column - n + 1 ; i--)
- a[begin_row + n - 1][i] = value++;
- for (int i = begin_row + n - 1; i >= begin_row ; i--)
- a[i][begin_column - n + 1] = value++;
- for (int i = begin_column - n + 2; i < begin_column; i++)
- a[begin_row][i] = value++;
- t++;
- Snake(N - 2 * t, value, t, N - 1 - t);
- }
- }
- int main()
- {
- cin >> N;
- Snake(N, 1, 0, N-1);
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- cout << setiosflags(ios::left) << setw(3) << a[i][j];
- cout << endl;
- }
- system("pause");
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/2503201511979.html
来源: http://www.codesnippet.cn/detail/2503201511979.html