蛇形填数
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
-
输入
- 直接输入方陈的维数,即n的值。(n<=100) 输出
- 输出结果是蛇形方陈。 样例输入
-
3
样例输出
-
7 8 1 6 9 2 5 4 3
来源
/* 算法思想: 用1,2,3,4 四个数字表示方向用-1表示蛇形矩阵的区域,并且未填写,在方向变换是注意横纵坐标的变化,这是易错点 */ #include<iostream> #include<cstdlib> #include<cstring> #define MAX 105 using namespace std; int Map[MAX][MAX]; int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ Map[i][j]=-1; } } int sum=n*n; int f=1,r=1,c=n; for(int cont=1;cont<=sum;){ if(f==1){ if(Map[r][c]==-1){ Map[r++][c]=cont++; } else { f=2,r--,c--; } } else if(f==2){ if(Map[r][c]==-1){ Map[r][c--]=cont++; } else { f=3,c++,r--; } } else if(f==3){ if(Map[r][c]==-1){ Map[r--][c]=cont++; } else { f=4,r++,c++; } } else if(f==4){ if(Map[r][c]==-1){ Map[r][c++]=cont++; } else { f=1,r++,c--; } } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cout<<Map[i][j]<<" "; } cout<<endl; } }