?
分析:
本题重点是分析矩阵。一开始看错了蛇,得到另一个矩阵。见附录一。
矩阵:
7 8 1
6 9 2
5 4 3
本文思路在于,先求最外层矩阵,再求内层矩阵。
最外层矩阵又可以分解成四个相似的子问题。
按照举例的矩阵来看:即 1 2、3 4、5 6、7 8。
问题引刃而解。
不过我花了很多时间,大概两个小时,因为一开始的代码没有现在的简洁。
用 i 来代表赋值的次数,可以大幅度减少思维量和代码量。
(官方给的最优代码容易想到,但是不容易表达)
?
?
#includeusing namespace std; #define maxSize 100 int center=0; int a[maxSize][maxSize]; int element=1; void outArray(int c1,int c2) //center { if(c1==c2) a[c1][c2]=element; //最后一次赋值 int i=-1; while(++i >n; while(center<=n-1-center) { outArray(center,n-1-center); center++; } for(int i=0;i 附录一: ?
另一种蛇。
?
/* /扩展的蛇形方阵 7 6 1 8 5 2 9 4 3*/ #includeusing namespace stdl #define maxSize 100 int main() { int n; cin>>n; int a[maxSize][maxSize]; int i=0; //行号 int element=1; for (int j=n-1;j>=0;j--) //列号 { if(i==0) //0 - n-1 { for(;i =0;i--)//while(--i>=0) a[i][j]=element++; i++; //i为0 } } for(int i=0;i ?