创建一个N*N的数组,顺时针依次增大

来源:互联网 发布:淘宝是白号,该怎么升心 编辑:程序博客网 时间:2024/05/18 03:13

第一次写点什么,以后觉得自己也应该记录点什么,不然容易忘记。在未来这也算是个回忆。

创建一个N*N的数组,顺时针依次增大:

#include <stdio.h>#define m 5int h = 1;int a[m][m];int flag = 1;int d = 0;int k = m;void print(){int i = 0;int j = 0;for(i = 0; i < m; i++){for(j = 0; j < m; j++){printf("%d\t",a[i][j]);}printf("\n");}}void judge(){if(h == m*m+1){print();flag = 0;}}void spiral(){int i = 0;while(flag){for(i = d; (i < k) &&(flag != 0); i++){a[d][i] = h++;judge();}for(i = d+1; (i < k) &&(flag != 0); i++){a[i][k-1] = h++;judge();}for(i = k-2; (i >= d) &&(flag != 0); i--){a[k-1][i] = h++;judge();}for(i = k-2; (i >= d+1) &&(flag != 0); i--){a[i][d] = h++;judge();}d++;k--;spiral();}}int main(){spiral(); return 0;}
    这里的代码用到了递归的思想,下面放一个用c++改写的代码。用到了模板:
#include <iostream> using namespace std;template <int N>class SpiralQueue{private:int a[N][N];int h;int flag;int d;int k;public:SpiralQueue(){h = 1;flag = 1;d = 0;k = N; }void print();void judge();void spiral();};template <int N>void SpiralQueue<N>::print(){int i = 0;int j = 0;for(i = 0; i < N; i++){for(j = 0; j < N; j++){printf("%d\t",a[i][j]);}printf("\n");}}template <int N>void SpiralQueue<N>::judge(){if(h == N*N+1){print();flag = 0;}}template <int N>void SpiralQueue<N>::spiral(){int i = 0;while(flag){for(i = d; (i < k) &&(flag != 0); i++){a[d][i] = h++;judge();}for(i = d+1; (i < k) &&(flag != 0); i++){a[i][k-1] = h++;judge();}for(i = k-2; (i >= d) &&(flag != 0); i--){a[k-1][i] = h++;judge();}for(i = k-2; (i >= d+1) &&(flag != 0); i--){a[i][d] = h++;judge();}d++;k--;spiral();}}int main(){SpiralQueue<20> sq1;cout<<"20 * 20: "<<endl;sq1.spiral(); return 0;}




0 0
原创粉丝点击